首页 - 新闻 - Java笔记--java逐行写入或读取数据

Java笔记--java逐行写入或读取数据

2023-10-10 07:04
-->

转自无情

java逐行写入或读取数据

链接:http://www.gsm-guard.net/linjiqin/archive/2011/03/23/1992250.html

如果E:/phsftp/evdokey目录下有evdokey_201103221556.txt文件,

现在写入或读取evdokey_201103221556.txt文件,解决写入或读取时乱码的问题。

文件内容如下:

张三,23,福建
李斯,30,上海
王五,43,北京
老林,21,重庆
西门庆,67,贵州

代码如下:

/**
* 逐行读取文件,适合字符读取。如果读取汉字就会出现乱码
*
* 直播关闭顺序:先开的后关,后开的先关,
* 否则可能会出现java.io.IOException: Stream closeed异常
*
* @抛出IOException
*/
@测试
public void readFile01() 抛出 IOException {
FileReader fr=new FileReader("E:/phsftp/evdokey/evdokey_201103221556.txt");
BufferedReader br=new BufferedReader(fr);
字符串行=“”;
String[] arrs=null;
while ((line=br.readLine())!=null) {
arrs=line.split(",");
System.out.println(arrs[0] + " : " + arrs[1] + ": " + arrs[2]);
}
br.close();
fr.close();
} /**
* 逐行读取文件,解决读取汉字时出现乱码的问题
*
* 直播关闭顺序:先开的后关,后开的先关,
* 否则可能会出现java.io.IOException: Stream closeed异常
*
* @抛出IOException
*/
@测试
public void readFile02() 抛出 IOException {
FileInputStream fis=new FileInputStream("E:/phsftp/evdokey/evdokey_201103221556.txt");
InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
//缩写如下
//BufferedReader br = new BufferedReader(new InputStreamReader(
)// new FileInputStream("E:/phsftp/evdokey/evdokey_201103221556.txt"), "UTF-8"));
字符串行=“”;
String[] arrs=null;
while ((line=br.readLine())!=null) {
arrs=line.split(",");
System.out.println(arrs[0] + " : " + arrs[1] + ": " + arrs[2]);
}
br.close();
isr.close();
fis.close();
} /**
* 逐行写入文件,适合写入字符。如果写汉字就会出现乱码
*
* 直播关闭顺序:先开的后关,后开的先关,
* 否则可能会出现java.io.IOException: Stream closeed异常
*
* @抛出IOException
*/
@测试
public void writeFile01() 抛出 IOException {
String[] arrs={
"张三,23,福建",
“丽丝,30,上海”,
"王五,43,北京",
"老林,21,重庆",
“西门庆,67,贵州”
};
FileWriter fw=new FileWriter(new File("E:/phsftp/evdokey/evdokey_201103221556.txt"));
//写汉字时会出现乱码
BufferedWriter bw=new BufferedWriter(fw);
//BufferedWriter bw=new BufferedWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("E:/phsftp/evdokey/evdokey_201103221556.txt")), "UTF-8"))); for(字符串 arr:arrs){
bw.write(arr+"\t\n");
}
bw.close();
fw.close();
} /**
* 逐行写入文件,解决写入汉字时出现乱码的问题
*
* 直播关闭顺序:先开的后关,后开的先关,
* 否则可能会出现java.io.IOException: Stream closeed异常
*
* @抛出IOException
*/
@测试
public void writeFile02() 抛出 IOException {
String[] arrs={
"张三,23,福建",
“丽丝,30,上海”,
"王五,43,北京",
"老林,21,重庆",
“西门庆,67,贵州”
};
//解决书写汉字时出现中文乱码的问题
FileOutputStream fos=new FileOutputStream(new File("E:/phsftp/evdokey/evdokey_201103221556.txt"));
OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw=new BufferedWriter(osw);
//缩写如下:
//BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
) // new FileOutputStream(new File("E:/phsftp/evdokey/evdokey_201103221556.txt")), "UTF-8")); for(字符串 arr:arrs){
bw.write(arr+"\t\n");
} //注意关闭顺序,先开后关,后开先关
bw.close();
osw.close();
fos.close();
}

 注:以下三行代码

FileOutputStream fos=new FileOutputStream(new File("E:/phsftp/evdokey/evdokey_201103221556.txt"));
OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw=new BufferedWriter(osw);

说明:http://www.gsm-guard.net/topics/330165652
FileOutputStream 是字节流,逐字节发送数据
OutputStreamWrite 是字符流,是一个字符使用一个字符向外部发送数据
它们有什么区别?
因为计算机是洋鬼子发明的,它的英文字符占一个字节,而我们的汉字占两个字节。
如果你用stream的话,读到的英文会乱,但读到的中文会是乱码或者“???”。
如果使用WRITER,就不会出现乱码了。

BufferedWriter Buffer就是缓冲区,为什么要用BUFFER?
如果直接使用stream或者writer,你的硬盘可能会读写一次一个字符或者一个字节到硬盘上。
但是如果你使用Buffer的话,你的硬盘就会读写一堆数据。硬盘。这对您的硬盘有好处。

-->