java IO操作实践

package com.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.channels.FileChannel;

import sun.nio.ch.FileChannelImpl;
/**
* 文件读写操作示例
* @author zwh
*
*/
public class EncodingTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String filePath = "conf/test.xml";
String newPath = "d:\\test.xml";
charStream2(filePath, newPath);
}
private static void fileChannel(String fromPath, String toPath) {

}
/**
* 使用缓存字符流BufferedReader/BufferedWriter进行文件读写操作
* 需要注意的是,使用readerLine()时,需要手动添加行结束符\n\r(windows)或\n(Linux\Unix)
* @param fromPath
* @param toPath
*/
private static void charStream2(String fromPath, String toPath) {
BufferedReader reader = null;
BufferedWriter writer = null;

try {
reader = new BufferedReader(new FileReader(fromPath));
writer = new BufferedWriter(new FileWriter(toPath));
StringBuilder sb = new StringBuilder();
String str = new String();
while((str = reader.readLine()) != null)
{
sb.append(str + "\n\r");
}
writer.write(sb.toString());
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用字符流操作文件
* 由于不能指定编码格式,默认拷贝无中文乱码
* @param fromPath
* @param toPath
*/
private static void charStream1(String fromPath, String toPath) {
Reader reader = null;
Writer writer = null;

try {
reader = new FileReader(fromPath);
writer = new FileWriter(toPath);
StringBuilder sb = new StringBuilder();
char[] buffer = new char[1024];
while (reader.read(buffer) != -1) {
sb.append(new String(buffer).trim());
}
writer.write(sb.toString());
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用字符流InputStreamReader/OutputStreamWriter进行文件读写操作
* 1,Reader/Writer均不指定编码格式时,中文无乱码
* 2,为Writer指定编码格式时,需指定为GBK,否则为乱码(可能跟当前操作系统有关)
* 3,为Reader指定编码格式时,同样只有指定为GBK时才不出现乱码
* 4,分别为Reader/Writer指定编码格式时,可使用utf-8或gbk,当必须成对,否则为乱码
* @param fromPath
* @param toPath
*/
private static void charStream(String fromPath, String toPath) {
Reader reader = null;
Writer writer = null;

try {
reader = new InputStreamReader(new FileInputStream(fromPath),"gbk");
writer = new OutputStreamWriter(new FileOutputStream(toPath),"gbk");
StringBuilder sb = new StringBuilder();
char[] buffer = new char[1024];
while (reader.read(buffer) != -1) {
sb.append(new String(buffer).trim());
}
writer.write(sb.toString());
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用字节流FileInputStream/FileOutputStream进行文件读写操作
* 读取文件之后,中文为乱码
* @param fromPath
* @param toPath
*/
private static void byteStream(String fromPath, String toPath) {
InputStream in = null;
OutputStream out = null;
byte[] buffer = new byte[1024];
try {
in = new FileInputStream(fromPath);
out = new FileOutputStream(toPath);
while (in.read(buffer) != -1) {
// sb.append(new String(buffer,"utf-8"));
out.write(buffer);
}
} catch (IOException e) {
e.printStackTrace();
}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值