IO
输入输出流基本概念
输入流:信息从程序空间之外的地方流入程序空间里面
输出流:信息从程序空间里面流到程序空间之外的地方
输入输出流的分类
-
从流的方法划分
- 输入流
- 输入流
-
从流的分工划分
- 节点流:访问文件进行输入输出操作的流
- 处理流:在节点流的基础之上对信息进行加工转换处理的流
-
从流的内容划分
- 面向字符的流:专门处理字符数据
- 面向字节的流:用于一般目的即输入输出
所有的输入输出流类都继承于以上四个类
-
面向字符的流的超类为Reader&Writer
-
面向字节的流的超类为InputStream&OutputStream
举一个简单的例子,复制一个文件的内容到另一个文件中
首先在该项目的文件所在位置新建一个Redirecting.txt文件
import java.io.*;
public class Redirecting {
public static void main(String[] args) throws FileNotFoundException {
BufferedInputStream in = new BufferedInputStream(
new FileInputStream("Redirecting.txt"));
//FileInputStream就是一个面向字节的流,然后再通过BufferedInputStream来转化,
//BufferedInputStream也是一个流,是一个缓冲流
PrintStream out = new PrintStream(new
BufferedOutputStream(new FileOutputStream("test.txt")));
System.setIn(in);
//将输入流重定向到Redirecting文件中,相当于本来我们是从键盘输入,现在变成从文件来输入
System.setOut(out);
//将输出流重定向到test.txt文件中,本来应该是输出到显示器上,现在输出到test文件中
System.setErr(out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedReader是一个面向字符的流,因为BufferedReder只处理信息,但是不读取信息
//因此我们需要用一个InputStreamReader来从文件中读取信息,再由BufferedReader转换
String s;
while((s=br.readLine())!=null)
System.out.println(s);
//因为我们已经输出流定向到test.txt文件中了,所以我们这里相当于复制的操作
in.close();
out.close();
}
}
写文本文件
import java.io.*;
public class FileWriterTester {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String fileName = "Hello.txt";
FileWriter writer = new FileWriter(fileName);
writer.write("Hello World!");
writer.close();
}
}
如果有大量的信息要写入文件,可以使用BufferedWriter
import java.io.*;
public class FileWriterTester {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String fileName = "Hello.txt";
BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
//跟前面说的一样,BufferedWriter也不直接对文件信息进行读取,它只处文件信息
//因此我们需要用一个FileWriter来读取文件,再转换为BufferedWriter
out.write("Hello World!");
out.newLine(); //跨平台的换行,\n不一定在各个平台都是换行
out.close();
}
}
读文本文件
import java.io.*;
public class FileWriterTester {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String fileName = "Hello.txt";
BufferedReader in = new BufferedReader(new FileReader(fileName));
//使用BuffereReader类可以按行读取
String c = in.readLine();
while(c!=null)
{
System.out.println(c);
c=in.readLine();
}
}
}
Reader类有一个read方法,返回文件中字符的ASCLL码
import java.io.*;
public class FileWriterTester {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String fileName = "Hello.txt";
FileReader in = new Fi