IOストリーム-一般的に使用されるストリームオブジェクト(5)
-
ファイル文字ストリーム
上記で紹介したファイルバイトストリームは、すべてのファイルを処理できます。テキストファイルを扱う場合は、文字単位で動作するファイル文字ストリームを使用することもできます。
-
ファイル文字入力ストリーム
import java.io.FileReader; public class FileReaderDemo { public static void main(String[] args) { FileReader frd=null; try { //创建文件字符输入流对象 frd=new FileReader("d:/a.txt"); int temp=0; while ((temp=frd.read())!=-1){ //read()它跟字节流最大的区别就是,返回的是文本文件字符的Unicode的值,而字节流返回的就是字节数 System.out.println((char) temp); } }catch (Exception e){ e.printStackTrace(); }finally { try { if (frd!=null){ frd.close(); } }catch (Exception e){ e.printStackTrace(); } } } }
-
ファイル文字出力ストリーム
import java.io.FileWriter; public class FileWriterDemo { public static void main(String[] args) { FileWriter fw=null; FileWriter fw2=null; try { //创建字符输出流对象 fw=new FileWriter("d:/sxt.txt"); fw.write("你好尚学堂\r\n"); fw.write("你好Oldlu\r\n"); fw.flush(); fw2=new FileWriter("d:/sxt.txt",true);//如果这里没有true,fw写入的数据就会被覆盖掉,而不是加在后面 fw2.write("何以解忧\r\n唯有尚学堂"); fw2.flush(); }catch (Exception e){ e.printStackTrace(); }finally { try { if (fw !=null){ fw.close(); } if (fw2 !=null){ fw2.close(); } }catch (Exception e){ e.printStackTrace(); } } } }
-
文字ストリームを使用して、テキストファイルのコピー処理を実現します
import java.io.FileReader; import java.io.FileWriter; public class FileCopyTools2 { public static void main(String[] args) { FileReader fr=null; FileWriter fw=null; try { fr=new FileReader("d:/sxt.txt"); fw=new FileWriter("d:/xun.txt"); //加一个缓冲区,不再是byte[],因为是字符流数组,;所以用char[] char[] buffer=new char[1024];//这个char[1024]的数组长度只能自己来定义,以2的整数幂,而不能用available预估大小的值 int temp=0; while ((temp=fr.read(buffer))!=-1){ fw.write(buffer,0,temp); } fw.flush(); }catch (Exception e){ e.printStackTrace(); }finally { try { //在文件字符流中,关闭流的顺序没有关系,谁先关闭都可以 if (fr!=null){ fr.close(); } if (fw!=null){ fw.close(); } }catch (Exception e){ e.printStackTrace(); } } } }
-
-
文字出力バッファストリーム
-
BufferedWriterは、文字出力ストリーム用のバッファオブジェクトです。文字出力バッファストリームでnewLine()を使用できます。つまり、改行メソッドを使用して改行処理を実行できます。
import java.io.BufferedWriter; import java.io.FileWriter; public class BufferedWriterDemo { public static void main(String[] args) { FileWriter fw=null; BufferedWriter bw=null; try { fw=new FileWriter("d:/sxt2.txt"); //创建字符缓冲流对象 bw=new BufferedWriter(fw); bw.write("你好尚学堂"); bw.write("你好Oldlu"); bw.newLine();//换行 bw.write("何以解忧"); bw.newLine(); bw.write("唯有尚学堂"); bw.flush(); }catch (Exception e){ e.printStackTrace(); }finally{ try { //关闭流的顺序:肯定是处理先关闭,节点流后关闭 if (bw!=null){ bw.close(); } if (fw!=null){ fw.close(); } }catch (Exception e){ e.printStackTrace(); } } } }
-
-
文字バッファストリームを介してテキストファイルのコピーを実現します
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; public class FileCopyTools3 { public static void main(String[] args) { copyFile("d:/sxt2.txt","d:/22.txt"); } /** * 基于字符缓冲流实现文件的拷贝 */ public static void copyFile(String src,String des){ BufferedReader br=null; BufferedWriter bw=null; try { br=new BufferedReader(new FileReader(src)); bw=new BufferedWriter(new FileWriter(des)); String temp=""; while ((temp=br.readLine())!=null){ //readLine())!=null判断读一行是否为空 bw.write(temp); bw.newLine();//他以行单位读出来的,我们写数据也要以行为单位,但是如果没有写换行,第二行的数据在第一行追加了 } bw.flush(); }catch (Exception e){ e.printStackTrace(); }finally { try { //这里先关闭哪个流都可以 if (br!=null){ br.close(); } if (bw!=null){ bw.close(); } }catch (Exception e){ e.printStackTrace(); } } } }
-
文字バッファストリームを介してファイルの内容に行番号を追加します
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; public class LineNumberDemo { public static void main(String[] args) { BufferedReader br=null; BufferedWriter bw=null; try { br=new BufferedReader(new FileReader("d:/sxt2.txt")); bw=new BufferedWriter(new FileWriter("d:/sxt3.txt")); String temp=""; int i=1;//序号生成的变量 while ((temp=br.readLine())!=null){ bw.write(i+","+temp); bw.newLine(); i++; } bw.flush(); }catch (Exception e){ e.printStackTrace(); }finally { try { if (br!=null){ br.close(); } if (bw!=null){ bw.close(); } }catch (Exception e){ e.printStackTrace(); } } } }