Java的I/O 笔记(2)
FileInputStream的练习:
1: import java.io.*;
2: public class TestFileInputStream {
3: public static void main(String[] args) {
4: int b = 0;
5: FileInputStream in = null;
6: try {
7: in = new FileInputStream("d:\\share\\java\\io\\TestFileInputStream.java");
8: } catch (FileNotFoundException e) { //如果没有throws语句,则使用try…catch
9: System.out.println("找不到指定文件");
10: System.exit(-1);
11: }
12:
13: try {
14: long num = 0; //num记录读取的字节数
15: while((b=in.read())!=-1){
16: System.out.print((char)b);
17: num++;
18: }
19: in.close();
20: System.out.println();
21: System.out.println("共读取了 "+num+" 个字节");
22: } catch (IOException e1) {
23: System.out.println("文件读取错误"); System.exit(-1);
24: }
25: }
26: }
这段代码是用FileInputStream读取d:\share\java\io\TestFileInputStream.java位置的文件,读取的内容就是以上代码。
由于是字节流,只能一个字节一个字节的读取,所以文件中的汉字都无法读取。
FileOutPutStream的练习:
1: import java.io.*;
2: public class TestFileOutputStream {
3: public static void main(String[] args) {
4: int b = 0;
5: FileInputStream in = null; //定义流实例in和out,指向null
6: FileOutputStream out = null;
7: try {
8: in = new FileInputStream("d:/share/java/HelloWorld.java"); //将in和out指向具体的文件
9: out = new FileOutputStream("d:/share/java/io/HW.java"); 如没有此文件,则自动新建
10: while((b=in.read())!=-1){
11: out.write(b);
12: }
13: in.close();
14: out.close();
15: } catch (FileNotFoundException e2) {
16: System.out.println("找不到指定文件"); System.exit(-1);
17: } catch (IOException e1) {
18: System.out.println("文件复制错误"); System.exit(-1);
19: }
20: System.out.println("文件已复制");
21: }
22: }
注意:文件地址的写法问题,如果用/的话,要在前面加一个/用来和转义符区别。也可以用\,就不用那么麻烦。转移符里用的是\n,\t之类。
d:/share/java/HelloWorld.java
等同于: d:\\share\\java\\HelloWorld.java
FileReader 练习:
1: import java.io.*;
2: public class TestFileReader {
3: public static void main(String[] args) {
4: FileReader fr = null;
5: int c = 0;
6: try {
7: fr = new FileReader("d:\\share\\java\\io\\TestFileReader.java");
8: int ln = 0;
9: while ((c = fr.read()) != -1) {
10: //char ch = (char) fr.read();
11: System.out.print((char)c);
12: //if (++ln >= 100) { System.out.println(); ln = 0;}
13: }
14: fr.close();
15: } catch (FileNotFoundException e) {
16: System.out.println("找不到指定文件");
17: } catch (IOException e) {
18: System.out.println("文件读取错误");
19: }
20:
21: }
22: }
FileWriter 练习:
1: import java.io.*;
2: public class TestFileWriter {
3: public static void main(String[] args) {
4: FileWriter fw = null;
5: try {
6: fw = new FileWriter("d:\\bak\\unicode.dat");
7: for(int c=0;c<=50000;c++){
8: fw.write(c);
9: }
10: fw.close();
11: } catch (IOException e1) {
12: e1.printStackTrace();
13: System.out.println("文件写入错误");
14: System.exit(-1);
15: }
16: }
17: }
1: import java.io.*;
2:
3: public class TestFileWriter2 {
4: public static void main(String[] args) throws Exception {
5: FileReader fr = new FileReader("d:/java/io/TestFileWriter2.java");
6: FileWriter fw = new FileWriter("d:/java/io/TestFileWriter2.bak");
7: int b;
8: while((b = fr.read()) != -1) {
9: fw.write(b);
10: }
11: fr.close();
12: fw.close();
13: }
14: }
缓冲流 要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率。
J2SDK提供了四种缓冲流&构造方法:
BufferedReader ------(Reader in) , (Reader in , int size) size为自定义缓冲区的大小
BufferedWriter--------(Writer out) , (Writer out , int size)
BufferedInputStream----(InputStream in ) , (InputStream in , int size)
BufferedOutputStream---(OutputStream out ) , (OutputStream out , int size)
观察构造方法的参数,可看成是Buffer套接在Reader,Writer,InputStream,OutputStream外面。
1: import java.io.*;
2: public class TestBufferStream1 {
3: public static void main(String[] args) {
4: try {
5: FileInputStream fis =
6: new FileInputStream("d:\\share\\java\\HelloWorld.java");
7: BufferedInputStream bis =
8: new BufferedInputStream(fis);
9: int c = 0;
10: System.out.println(bis.read());
11: System.out.println(bis.read());
12: bis.mark(100);
13: for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
14: System.out.print((char)c+" ");
15: }
16: System.out.println();
17: bis.reset();
18: for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
19: System.out.print((char)c+" ");
20: }
21: bis.close();
22: } catch (IOException e) {e.printStackTrace();}
23: }
24: }
1: import java.io.*;
2: public class TestBufferStream2 {
3: public static void main(String[] args) {
4: try {
5: BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\share\\java\\dat2.txt"));
6: BufferedReader br = new BufferedReader(
7: new FileReader("d:\\share\\java\\dat2.txt"));
8: String s = null;
9: for(int i=1;i<=100;i++){
10: s = String.valueOf(Math.random());
11: bw.write(s); //将s输出到文件
12: bw.newLine(); //写出一个空行
13: }
14: bw.flush(); // Writer的flush()方法
15: while((s=br.readLine())!=null){ //BufferedReader 的readline方法可以一次读取一行text
16: System.out.println(s);
17: }
18: bw.close();
19: br.close();
20: } catch (IOException e) { e.printStackTrace();}
21: }
22: }