java笔记八:IO流之字符流与字符缓冲流
2013-05-08 20:48
190 查看
java中字符流主要都是继承于Reader和Writer两个抽象类。用于对字符文本的读写操作。
一、转换类流
二、FileReader和FileWriter
三、BufferedReader和BufferedWriter
四、PrintWriter
五、标准IO
六、随即访问文件类
一、转换类流
package com.iotest; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class ConverseStreamDemo { public static void main(String[] args) { String s = "F:\\shar\\test\\test3.txt"; try { //将字节流转为字符流 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(s)); osw.write("中国北京"); System.out.println(osw.getEncoding()); osw.close(); osw = new OutputStreamWriter(new FileOutputStream(s,true),"GB2312"); osw.write("中国北京"); System.out.println(osw.getEncoding()); osw.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { //将字节流转为字符流 InputStreamReader isr = new InputStreamReader(new FileInputStream(s),"GB2312"); int c; while((c=isr.read()) != -1){ System.out.print((char)c); } System.out.println(); isr.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
二、FileReader和FileWriter
package com.iotest; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /* * 使用flush()将流数据刷到目标里,这时流还存活着,还可以继续使用该流进行别的操作。 * close()虽然也有flush()的效果但是这时流已经死了,你如果想继续使用流的话就必须在此建立流 */ public class MutiplicationTable { public static void main(String[] args) throws IOException { String s = "F:\\shar\\test\\test5.txt"; FileWriter fw = new FileWriter(s); FileReader fr = new FileReader(s); for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { String str = i + "*" + j + "=" + i*j + " "; fw.write(str); } fw.write("\r\n"); /*flush是指强行将输出流中的数据写到文件里面去。如果写到这里的话就是一行一行的写入文件 *最好每写完一部分就刷新一次,如果最后刷新的话可能会造成数据的丢失 */ fw.flush(); } //如果又不写flush()又不写close(),则不会写入任何内容到文本里。只是写到了缓冲区 //fw.flush(); 写到这里的话就是所有的内容一起写进文件 //fw.close(); close之前会调用flush() //读字符输入流的数据 int c; while ((c=fr.read())!=-1) { System.out.print((char)c); } } }
三、BufferedReader和BufferedWriter
package com.iotest; import java.io.BufferedOutputStream; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; public class PrimeNumber { BufferedWriter bw = null; String fileName = "F:\\shar\\test\\test7.txt"; //判断是否是质数 public boolean isPrime(int n){ for(int i=2;i<=n/2;i++){ if(n%i == 0){ return false; } } return true; } void printPrime(int m) throws IOException{ //将字节流转缓冲流 bw = new BufferedWriter(new FileWriter(fileName)); int j = 0; for (int i = 2; i < m; i++) { if(isPrime(i)){ j++; String s = String.valueOf(i); String s1 = s + " "; bw.write(s1); //写入文本文件 if(j==10){ j = 0; bw.newLine(); //写入一个行分隔符 bw.flush(); //强制刷新 } } } bw.close(); } public static void main(String[] args) throws IOException { PrimeNumber pn = new PrimeNumber(); pn.printPrime(100); } }
四、PrintWriter
package com.iotest; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class PrintWriterDemo { public static void main(String[] args) throws IOException { int A = 0; //千位 int B = 0; //百位 int C = 0; //十位 int num = 0; String fileName = "F:\\shar\\test\\test8.txt"; FileWriter fw = new FileWriter(fileName); //字符输出流 PrintWriter pw = new PrintWriter(fw); //将字节输出流转为PrintWriter for (int i = 1000; i < 10000; i++) { A = i/1000; B = i/100 % 10; C = i/10 % 10; if(i%11==0 && A == B+C){ pw.print(i+" "); if(++num % 7 == 0){ pw.println(); //写入回车换行 pw.flush(); //强制刷新流 } } } fw.close(); } }
五、标准IO
package com.iotest; import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Scanner; public class PackStardIO { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); PrintWriter o = new PrintWriter(System.out); //包装标准输出 String s; while((s=br.readLine())!=null && s.length()!=0){ o.println(s.toUpperCase()); //o.flush(); //一定要强制刷新让其输出来,否则不会输出 } } }
package com.iotest; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; public class StandardIORedirect { public static void main(String[] args) throws IOException { PrintStream console = System.out; BufferedInputStream in = new BufferedInputStream(new FileInputStream("C:\\Documents and Settings\\01\\桌面\\Test\\src\\com\\iotest\\StandardIORedirect.java")); PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\shar\\test\\test9.txt"))); System.setIn(in); //对标准输入流重定向 System.setOut(out); System.setErr(out); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s; while((s=br.readLine())!=null){ //从BufferedReader中读取一行数据 System.out.println(s); } out.close(); System.setOut(console); } }
六、随即访问文件类
package com.iotest; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class RandomRW { public static void main(String[] args) throws IOException { RandomAccessFile raf = new RandomAccessFile("F:\\shar\\test\\test10.dat","rw"); final int DOUBLE_SIZE = 8; for (int i = 0; i < 10; i++) { raf.writeDouble(i); System.out.print(" " + (double)i); } System.out.println(); raf.close(); RandomAccessFile raf1 = new RandomAccessFile("F:\\shar\\test\\test10.dat","rw"); raf1.seek(3*DOUBLE_SIZE); //找到某个位置 raf1.writeDouble(300); //往该位置插入数据 raf1.seek(5*DOUBLE_SIZE); raf1.writeDouble(500); raf1.close(); RandomAccessFile raf2 = new RandomAccessFile("F:\\shar\\test\\test10.dat","r"); for (int i = 0; i < 10; i++) { System.out.print(" "+raf2.readDouble()); } raf2.close(); } }
相关文章推荐
- java笔记八:IO流之字符流与字符缓冲流
- Java笔记(7)-输入、输出流、File类、InputStream、Reader、文件字节流、文件字符流、缓冲流、随机流、数据流、对象流、序列化和对象克隆、Scanner解析文件、Console流
- java中的io流(输入输出流,序列化与反序列化,字节流 , 字符流,包装流,缓冲流)
- Java基础知识强化之IO流笔记34:OutputStreamWriter(Writer字符流的子类)5种write数据方式
- Java学习笔记之IO流中的文件字符流
- java笔记八:IO流之字符流与字符缓冲流
- Java基础知识强化之IO流笔记40:字符流缓冲流之特殊功能 [ newLine() / readLine() ]
- (43)Java学习笔记——IO流 / 字符流 / 编码表
- java笔记 IO流之字符流
- java笔记→IO流中字节,字符的输入与输出(文件)
- 【km笔记】--java之IO流(字符流和字节流)
- 黑马程序员--Java基础学习笔记【IO流-字符流】
- Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用
- Java学习笔记之IO流中的缓冲流
- Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)
- JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
- Java IO流 将字节流转换成字符流在转换成缓冲流
- Java精选笔记_IO流(字符输入输出流、字符文件输入输出流、字符流的缓冲区)
- 【学习笔记】Java IO流(1)--字符输出流FileWriter
- 黑马程序员——JAVA基础------IO流(四)----字节字符转换流和缓冲流