io流
1. 字符流:
输出流,写入文件的抽象基类(体系中的最高层的父类) Writer
输入流,读取文件的抽象基类 Reader
2. 字节流:
输出流,写入文件的抽象基类 OutputStream
输入流,读取文件的抽象基类 InputStream
3.字符流的输出流(写文件)使用
查阅API文档,找到了使用的子类,FileWriter
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
void write(String str) 是FileWriter类的父类的方法
记住:Java中字符流写数据,不会直接写到目的文件中,写到内存中,想将数据写到目的文件中,刷新,刷到目的文本中
flush()刷新
记住:流对象中的功能,调用了Windows系统中的功能来完成,释放掉操作系统中的资源,简称:关闭流,close方法,关闭流之前,关闭的时候,先要刷新流中的数据,但是,如果写文件的数据量很大,写一句刷一句才好.
记住:IO操作,需要关闭资源,关闭资源的时候,开了几个流,就要关闭几个流,单独的进行关闭资源,单独写try catch,保证每一个流都会被关闭
4. 字符流的输入流(读文件)使用
字符流读取文件,查阅API文档找到了Reader
read()方法读取单个字符,返回int值?返回的int值,是读取到的字符的ASCII码值
read()方法,每执行一次,自动的向后读取一个字符,读取到文件末尾的时候,得到-1的值
找到Reader类的子类 FileReader
FileReader(String fileName) 传递字符串文件名
read(字符数组) 返回int值 数组中存储的就是文件中的字符
int返回值,读到末尾就是-1, int返回数组中,读取到的字符的有效个数
好处:可以提高读取的效率
5. 复制文本文件
读取源文件 FileRreader
写入到目的文件 FileWriter
利用缓冲区复制文件, 读一行,写一行的操作
6. 字符流的缓冲区对象
利用数组提升了文件的读写速度,运行效率提升了,我们想到了效率问题,Java工程师(Oracle),也想到了提升效率,写好了字符流的缓冲区对象,目的提供流的写,读的效率
写入流的缓冲区对象BufferedWriter
BufferedWriter(Writer out),参数Writer类型的参数,传递的参数是Writer类的子类对象
缓冲区,提供流的写的效率,哪个流的效率? FileWriter
void newLine() 写一个换行,具有跨平台
不用newLine()方法,也可以实现换行 \r\n
\r\n Windows下的换行符号
\n Linux下的换行符号
读取流的缓冲区对象BufferedReader
BufferedReader(Reader in)
参数Reader类型参数,传递的是Reader类的子类对象
缓冲区,提供流的读的效率,哪个流的效率FileRreader
读取一行的方法 readLine(),文件末尾返回null
不是末尾返回字符串 String
1. 字符流:
输出流,写入文件的抽象基类(体系中的最高层的父类) Writer
输入流,读取文件的抽象基类 Reader
2. 字节流:
输出流,写入文件的抽象基类 OutputStream
输入流,读取文件的抽象基类 InputStream
3.字符流的输出流(写文件)使用
查阅API文档,找到了使用的子类,FileWriter
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
void write(String str) 是FileWriter类的父类的方法
记住:Java中字符流写数据,不会直接写到目的文件中,写到内存中,想将数据写到目的文件中,刷新,刷到目的文本中
flush()刷新
记住:流对象中的功能,调用了Windows系统中的功能来完成,释放掉操作系统中的资源,简称:关闭流,close方法,关闭流之前,关闭的时候,先要刷新流中的数据,但是,如果写文件的数据量很大,写一句刷一句才好.
记住:IO操作,需要关闭资源,关闭资源的时候,开了几个流,就要关闭几个流,单独的进行关闭资源,单独写try catch,保证每一个流都会被关闭
4. 字符流的输入流(读文件)使用
字符流读取文件,查阅API文档找到了Reader
read()方法读取单个字符,返回int值?返回的int值,是读取到的字符的ASCII码值
read()方法,每执行一次,自动的向后读取一个字符,读取到文件末尾的时候,得到-1的值
找到Reader类的子类 FileReader
FileReader(String fileName) 传递字符串文件名
read(字符数组) 返回int值 数组中存储的就是文件中的字符
int返回值,读到末尾就是-1, int返回数组中,读取到的字符的有效个数
好处:可以提高读取的效率
5. 复制文本文件
读取源文件 FileRreader
写入到目的文件 FileWriter
private static void copyTextByChar() {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("C:\\server.xml");
fw = new FileWriter("D:\\server.xml");
int len = 0;
while ((len = fr.read()) != -1) {
fw.write((char) len);
}
} catch (IOException e) {
throw new RuntimeException("复制文件失败");
} finally {
try {
if (fw != null)
fw.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
try {
if (fr != null)
fr.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
}
}
private static void copyTextByArray() {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("C:\\server.xml");
fw = new FileWriter("D:\\server.xml");
char[] buf = new char[1024];
int len = 0;
while ((len = fr.read(buf)) != -1) {
fw.write(buf, 0, len);
}
} catch (IOException e) {
throw new RuntimeException("复制文件失败");
} finally {
try {
if (fw != null)
fw.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
try {
if (fr != null)
fr.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
}
}
利用缓冲区复制文件, 读一行,写一行的操作
6. 字符流的缓冲区对象
利用数组提升了文件的读写速度,运行效率提升了,我们想到了效率问题,Java工程师(Oracle),也想到了提升效率,写好了字符流的缓冲区对象,目的提供流的写,读的效率
写入流的缓冲区对象BufferedWriter
BufferedWriter(Writer out),参数Writer类型的参数,传递的参数是Writer类的子类对象
缓冲区,提供流的写的效率,哪个流的效率? FileWriter
void newLine() 写一个换行,具有跨平台
不用newLine()方法,也可以实现换行 \r\n
\r\n Windows下的换行符号
\n Linux下的换行符号
FileWriter fw = new FileWriter("c:\\1.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("哈哈");
bw.newLine();
bw.write("呵呵");
bw.close();
读取流的缓冲区对象BufferedReader
BufferedReader(Reader in)
参数Reader类型参数,传递的是Reader类的子类对象
缓冲区,提供流的读的效率,哪个流的效率FileRreader
读取一行的方法 readLine(),文件末尾返回null
不是末尾返回字符串 String
FileReader fr = new FileReader("c:\\1.txt");
BufferedReader br = new BufferedReader(fr);
String line = null;
while((line = br.readLine())!=null){
System.out.println(line);
}
br.close();
private static void copyTextByBuffered() {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader("C:\\1.txt"));
bw = new BufferedWriter(new FileWriter("D:\\2.txt"));
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
} catch (IOException e) {
throw new RuntimeException("复制文件失败");
} finally {
try {
if (bw != null)
bw.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
try {
if (br != null)
br.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
}
}
也可以用apache的FileUtils实现文件复制,需要引用commons-io.jar
public static void main(String[] args) throws IOException {
File srcFile = new File("C:\\file\\8.txt");
File destFile = new File("C:\\file\\local\\8.txt");
FileUtils.copyFile(srcFile, destFile);
}