<1 IO流(概述)>
按照操作的数据分为两种:字节流、字符流。
<2 IO流(FileWriter)>
package day18;
import java.io.FileWriter;
import java.io.IOException;
/**
* 字符流和字节流:
* 字节流两个基类:
* InputStream OutputStream
*
* 字符流两个基类:
* Reader Writer
*
* 先学习一下字符流的特点。
*
* 既然IO流是用于操作数据的,
* 那么数据的最常见体现形式是:文件。
*
* 那么先以操作文件为主来演示。
*
* 需求:在硬盘上,创建一个文件并写入一些文字数据。
*
* 找到一个专门用于操作文件的Writer自雷对象。FileWriter。
* 后缀名是父类名,前缀名是该流对象的功能。
* Created by Administrator on 2017/1/29.
*/
public class Test1 {
public static void main(String[] args) throws IOException {
//创建一个FileWriter对象。该对象一被初始化,就必须要明确被操作的文件。
//而且该文件会被创建到指定的目录下。如果该目录下已有同名文件,将被覆盖。
//其实该步就是在明确数据要存放的目的地。
FileWriter fw = new FileWriter("demo.txt");
//调用write方法,将字符串写入到流中。
fw.write("abcde");
//刷新流对象中的缓冲中的数据。
//将数据刷到目的地中.
// fw.flush();
//
// fw.write("abc");
// fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
//将数据刷到目的地中。
//和flush的区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
fw.close();
// fw.write("haha");
}
}
<3 IO流(IO异常处理方式)>
package day18;
import java.io.FileWriter;
import java.io.IOException;
/**
* IO异常的处理方式。
* Created by Administrator on 2017/1/29.
*/
public class FileWriterDemo2 {
public static void main(String[] args){
//在外边建立引用,在内部进行初始化
FileWriter fw = null; //调用底层资源
try {
fw = new FileWriter("demo.txt");
fw.write("abcdefg"); //数据写入到“流”里面了
} catch (IOException e) {
System.out.println("catch:" + e.toString());
}finally {
try {
if(fw != null) //一定要进行判断!
fw.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
}
<04 IO流(文件的读写)>
package day18;
import java.io.FileWriter;
import java.io.IOException;
/**
* 演示对已有文件的数据续写。
* Created by Administrator on 2017/1/29.
*/
public class FileWriterDemo3 {
public static void main(String[] args) throws IOException {
//传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
FileWriter fw = new FileWriter("a.txt", true);
fw.write("nihao\nxiexie");
fw.close();
}
}
<05 IO流(文本文件读取方式一)>
package day18;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* Created by Administrator on 2017/1/29.
*/
public class FileReaderDemo {
public static void main(String[] args) throws IOException {
//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException。
FileReader fr = new FileReader("demo.txt");
//调用读取流对象的read方法
//read():一次读一个字符。而且会自动往下读。
int ch = 0;
while ((ch = fr.read()) != -1){
System.out.println((char)ch);
}
/* while (true){
int ch = fr.read();
if(ch == -1)
break;
System.out.println("ch=" + (char)ch);
}*/
// int ch = fr.read();
// System.out.println("ch=" + (char)ch);
fr.close(); //调用的是Windows的read方法。
}
}
<06 IO流(文本文件读取方式二)>
package day18;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* 第二种方式:通过字符数组进行读取。
* Created by Administrator on 2017/1/30.
*/
public class FileReaderDemo2 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组,用于存储读到的字符。
//该read(char[])返回的是读到的字符个数.
char[] buf = new char[1024];
int num = 0;
while((num=fr.read(buf)) != -1){
System.out.println(new String(buf, 0, num));
}
fr.close();
}
}
<07 IO流(文本文件读取练习)>
package day18;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* 读取一个.java文件,并打印在控制台上。
* Created by Administrator on 2017/1/30.
*/
public class FileReaderTest {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("demo.txt");
char[] buf = new char[1024];
int num = 0;
while((num = fr.read(buf)) != -1){
System.out.println(new String(buf, 0, num));
}
fr.close();
}
}
<08 IO流(拷贝文本文件)>
package day18;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 将c盘一个文本文件复制到D盘
* 复制的原理:
* 其实就是将C盘下的文件数据存储到D盘的一个文件中。
*
* 步骤:
* 1. 在D盘创建一个文件。用于存储C盘文件中的数据。
* 2. 定义读取流和C盘文件关联。
* 3. 通过不断的读写完成数据的存储。
* 4. 关闭资源。
* Created by Administrator on 2017/1/30.
*/
public class CopyTest {
public static void main(String[] args) throws IOException {
// copy_1();
copy_2();
}
//从C盘读一个字符,就往D盘写一个字符
public static void copy_1() throws IOException {
//创建目的地。
FileWriter fw = new FileWriter("Demo_copy.txt");
//与已有文件关联。
FileReader fr = new FileReader("demo.txt");
int ch = 0;
while((ch = fr.read()) != -1){
fw.write(ch);
}
fw.close();
fr.close();
}
public static void copy_2(){
FileWriter fw = null; //局部变量都要初始化一些
FileReader fr = null;
try{
fw = new FileWriter("copy.txt");
fr = new FileReader("demo.txt");
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 {
if(fr != null){
try{
fr.close();
}catch(IOException e){
}
}
if(fw != null)
try{
fw.close();
}catch(IOException e){
}
}
}
}
<09 IO流(拷贝文本文件图例)>