NIO 中文乱码问题的解决代码实现

本文介绍了一种使用NIO解决文件复制过程中中文乱码问题的方法。通过自定义的字符解码器,确保了文件内容的正确性。该方案简化了传统解决方式,并通过实例演示了如何操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在网上查询了很多关于解决NIO中文乱码的问题,仁者见仁智者见智,不过就找到的几种方法实现都太繁琐了,稍微研究了下NIO源码,以下是我自己的一种实现,偷懒用最简单的代码去实现是我的习惯!

Demo:


		String backupPath = "备份文件夹的路径";
		
		backupPath += File.separator + "ERROR";
		
		File file = new File(filePath);
		
		File backupDirectory = new File("需要复制的文件夹全路径");
		
		if(!backupDirectory.exists()) {
			backupDirectory.mkdir();
		}
		//创建临时文件
		File backupFile = new File(backupPath + File.separator + file.getName());
		
		backupFile.createNewFile();
		
		FileOutputStream fos = new FileOutputStream(backupFile, false);
		
		FileInputStream fis = new FileInputStream(file);
		//获取输入通道
		FileChannel fc_in = fis.getChannel();
		//获取输出通道
		FileChannel fc_out = fos.getChannel();
		//创建缓冲区
		ByteBuffer buffer = ByteBuffer.allocate(102400);  //这里用1 或者 一个很大的数 比如1024比较小的数也是有几率出现乱码的
		
		CharBuffer charBuffer = CharBuffer.allocate(102400);
		
		char[] charCache = null;
		
		//字符编码
		Charset charset = Charset.forName("GBK");
		
		CharsetDecoder charDecoder = charset.newDecoder();
		
		//读取数据到缓冲区
		while((fc_in.read(buffer)) != -1) {
			buffer.flip();
			
			charDecoder.decode(buffer, charBuffer, true);
			
			charBuffer.flip();
			
			charCache =  new char[charBuffer.length()]; 
			
			while (charBuffer.hasRemaining()) {
				
				charBuffer.get(charCache);
				
				String str = new String(charCache);
				
				System.out.println(str);
				
				buffer = ByteBuffer.wrap(str.getBytes());
			}
			
			fc_out.write(buffer);
			
			charBuffer.clear();
			
			buffer.clear();
			
		}
		
		fis.close();
		
		fos.close();








                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值