Java语言-49:File文件的复制和读写功能

1、复制功能(copy):

                    package IO;


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;


/*需求:将asd.txt文件中的内容复制到f.txt中
 * 分析:优先采用字符流;
 * 1)源文件:asd.txt----->Reader---->InputStreamReader----->FileReader
 * 2)目的地文件:f.txt----->Writer---->OutputStreamWriter------>FileWriter
 * 3)Reader:用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。
 * 4)InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符
5)  FileReader(File file) :在给定从中读取数据的 File 的情况下创建一个新 FileReader。
 * 6)Writer() : 创建一个新的字符流 writer,其关键部分将同步 writer 自身。
 * 7)OutputStreamWriter :字符流通向字节流的桥梁
 * 8)FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream。
 * */
public class CopyFile_method {


public static void main(String[] args) throws Exception {
//封装源文件和目的地文件
FileReader fr = new FileReader("asd.txt");
FileWriter fw = new FileWriter("f.txt");

//一次读取一个字符数组
char[]ch = new char[1024];
int len = 0;
//判断
while ((len = fr.read(ch)) != -1) {
//向f.txt文件中写数据
fw.write(ch, 0, len);
}

//释放数据
fr.close();
fw.close();


}


}

2、读取功能(Reader):

             Reader :  用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。

              子类:字符转换输入流:InputStreamReader

               子类InputStreamReader构造方法:

              1)InputStreamReader(InputStream in) :构造一个字符转换输入流,默认编码

              2)public InputStreamReader(InputStream in,Charset cs) 构造一个字符转换输入流,指定编码

             

              3)字符转换输入流=字节流+编码格式

            package Reader;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;


/*需求:输出当前项目下asd.txt文件下的内容,输出在控制台
 * 字符转换输入流=字节流+编码格式
 * 分析:1)创建InputStreamReader读取数据对象
 * 2)读取数据
 * 3)输出在控制台
 * 4)关闭资源
 * 
 * */
public class InputStreamReader_method {


public static void main(String[] args) throws Exception, IOException {
// 创建InputStreamReader对象,指定编码格式格式类型
InputStreamReader in = new InputStreamReader(new FileInputStream("asd.txt"), "gbk");


// 读取数据
// 一次读取一个字符数组
char[] ch1 = new char[1024];
int len = 0;
// 确定有输出
while ((len = in.read(ch1)) != -1) {
// 输出在控制台
System.out.println(new String(ch1, 0, len)); //输出:hello
}
// 关闭资源
in.close();


}

  

}

3、书写功能(Writer):

                Writer : 写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。          

  字符输入流:Reader
   字符输出流:Writer
  字符输出流/字符输入流:都是抽象类
   使用一个子类:转换流
 
  字符输出流的构造方法
  public OutputStreamWriter(OutputStream out):使用默认的编码格式构造一个字符转换输出流对象
  public OutputStreamWriter(OutputStream out, Charset cs):使用指定编码格式构造一个字符转换输出流对象
  
  转换流的构成=字节流+编码格式(平台默认/指定)
  
  
  转换流的对象的创建,格式比较长,非常麻烦,Java--->转换流的便捷类
  Reader:抽象类:字符输入流
   inputStreamReader(字符转换输入流 :inputStream+编码格式)
   便捷类:FileReader,这个类可以直接对文件进行操作
  
  Writer:抽象类:字符输出流
   outputStreamWriter(字符转换输出流:outputStream+编码格式)
   便捷类:FileWriter,这个类可以直接对文件进行操作


猜你喜欢

转载自blog.csdn.net/qq_41833394/article/details/80426754