java中的流IO
输入/输出流的分类:
java.io
Class InputStream
java.io
Class OutputStream
java.io
Class Reader
java.io
Class Writer
节点流类型(以Reader/Writer结尾的都是字符,以Stream结尾的都是字节):
测试FileInputStream类
java.io
Class FileInputStream
TestFileInputStream.java
import java.io.*;
/*
测试FileInputStream,文件输入流。
*/
public class TestFileInputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
try {
in = new FileInputStream("F:\\java\\io\\TestFileInputStream.java");
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
System.exit(-1);//退出系统
}
try {
//读了多少个字节
long num = 0;
//read读出一个字节,!=-1代表还没有读到结尾
while((b=in.read())!=-1){
//将b强制转换为char类型,打印出来
System.out.print((char)b);
num++;
}
//关闭
in.close();
//换行
System.out.println();
System.out.println("共读取了 "+num+" 个字节");
} catch (IOException e1) {
System.out.println("文件读取错误"); System.exit(-1);
}
}
}
F:\java\io>javac TestFileInputStream.java F:\java\io>java TestFileInputStream import java.io.*; /* ????FileInputStream???????????÷?? */ public class TestFileInputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null; try { in = new FileInputStream("F:\\java\\io\\TestFileInputStream.java"); } catch (FileNotFoundException e) { System.out.println("?????????¨????"); System.exit(-1);//???????? } try { //?????à????×??? long num = 0; //read????????×?????!=-1?ú±í???????????á?? while((b=in.read())!=-1){ //??b????×?????char?à?????ò?????? System.out.print((char)b); num++; } //??±? in.close(); //???? System.out.println(); System.out.println("???????? "+num+" ??×???"); } catch (IOException e1) { System.out.println("?????????í?ó"); System.exit(-1); } } } 共读取了 876 个字节 F:\java\io>
上面出现好多个????的原因是汉字占两个字节,将占两个字节的汉字强制转为一个字节,无法识别。
测试文件输出流,FileOutputStream
java.io
Class FilterOutputStream
TestFileOutputStream.java
import java.io.*;
/*
测试文件输出流,FileOutputStream
复制文件的内容
*/
public class TestFileOutputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
FileOutputStream out = null;
try {
//从这个文件往外读数据
in = new FileInputStream("F:/java/io/HelloWorld.java");
//输出的文件
out = new FileOutputStream("F:/java/io/HW.java");
while((b=in.read())!=-1){
//将读到的文件写入输出的文件中
out.write(b);
}
in.close();
out.close();
} catch (FileNotFoundException e2) {
System.out.println("找不到指定文件");
System.exit(-1);
} catch (IOException e1) {
System.out.println("文件复制错误");
System.exit(-1);
}
System.out.println("文件已复制");
}
}
F:\java\io>javac TestFileOutputStream.java F:\java\io>java TestFileOutputStream 文件已复制 F:\java\io>
找到HelloWorld.java和HW.java,发现文件的内容一样。复制成功。
测试
java.io
Class FileReader
TestFileReader.java
import java.io.*;
/*
通过字符流的形式读取文件FileReader
*/
public class TestFileReader {
public static void main(String[] args) {
FileReader fr = null;
int c = 0;
try {
fr = new FileReader("F:\\java\\io\\TestFileReader.java");
int ln = 0;
while ((c = fr.read()) != -1) {
//char ch = (char) fr.read();
System.out.print((char)c);
//if (++ln >= 100) { System.out.println(); ln = 0;}
}
fr.close();
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
} catch (IOException e) {
System.out.println("文件读取错误");
}
}
}
F:\java\io>javac TestFileReader.java F:\java\io>java TestFileReader import java.io.*; /* 通过字符流的形式读取文件FileReader */ public class TestFileReader { public static void main(String[] args) { FileReader fr = null; int c = 0; try { fr = new FileReader("F:\\java\\io\\TestFileReader.java"); int ln = 0; while ((c = fr.read()) != -1) { //char ch = (char) fr.read(); System.out.print((char)c); //if (++ln >= 100) { System.out.println(); ln = 0;} } fr.close(); } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); } catch (IOException e) { System.out.println("文件读取错误"); } } } F:\java\io>
中文没有乱码。
测试
java.io
Class FileWriter
TestFileWriter.java
import java.io.*;
/*
通过字符流写入文件
*/
public class TestFileWriter {
public static void main(String[] args) {
FileWriter fw = null;
try {
//创建unicode.dat文件
fw = new FileWriter("F:\\java\\io\\unicode.dat");
for(int c=0;c<=50000;c++){
//写入unicode编码的前5000个字符
fw.write(c);
}
fw.close();
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("文件写入错误");
System.exit(-1);
}
}
}
F:\java\io>javac TestFileWriter.java
F:\java\io>java TestFileWriter
F:\java\io>
在相应文件目录上会存在unicode.dat文件。