IO流基础---字符流的写入写出

IO流

IO:数据的写入写出,(数据持久化)针对操作数据的特点不同,采用不同的流。

File类的使用

File类的一个对象,代表一个文件或者一个文件目录。

//path 可以是绝对路径也可以是相对路径
File file= new File(path);

关于相对路径,不同的IDE的相对路径不同。
Eclipse和IDEA的相对路径不同。

  • IDEA的相对路径:
    如果使用Junit中的单元测试方法进行测试,相对路径即为Module下;
    如果使用main()测试,相对路径就是当前的project中。

  • 路径分隔符
    在不同的OS中,分隔符是不同的。

  • FIle类常用的方法红色为常用方法

IO流原理及流的分类

IO是非常使用的技术,用于处理设备和设备之间的数据传输。如读写文件,网络通讯等。

对于数据的操作以流(stream)的方式进行。

  • 文件到程序:输入

  • 程序到文件:输出

  • 网络到内存:输入

  • 内存到网络:输出

  • 内存到数据库:输出

程序员站位是程序也就是内存,只有站位准了才能选择正确的类。

流的分类:

按照数据单位不同划分

  • 字节流8bit byte
  • 字符流16bit char

字符流更加适合处理文本。字节流适合处理图片、视频、音频等。

按照角色不同分为:

  • 节点流(直接作用在文件file类上)
  • 处理流(作用在已有流的基础上)

按照流的流向不同划分

  • 输入流
  • 输出流

流的抽象类

记住这四个,就可以区分出全部的流
蓝色的是需要重点关注的

  • 字符的读入
//1.实例化File类对象,指明要操作的文件
File file = new File("hello.txt");

//2.提供具体的流
FileReader fr = new FileReader(file);
//3.数据的读入
//read();返回读入的一个字符,如果达到文件末尾就返回-1
//无参数的read()方法,每次读入一个字符。
int data = fr.read();//将字符转化为int值
while(data != -1){
    
    
	System.out.print((char)data);
	data = fr.read();
}
//流的关闭
fr.close();

为了保证流的资源一定能关闭,要使用try catch finally进行异常处理, 在finally中关闭流。

总结:数据的读入操作,要保证被读入的文件一定要存在,否则就会报FileNotFoundException。

对read()的操作升级,使用read的重载方法

File file = new File("hello.txt");
//1.File类的实例化

//2. XXX流的实例化
FileReader fr = new FileReader(file);
//3. 读入的操作
//每次读入的字符的个数。
char[] cbuf = new char[5];
int len;
while((len = fr.read(cbuf)) != -1){
    
    
	//错误写法:
	//for(int i = 0; i<cbuf.length;i++){
    
    
	//	System.out.print(cbuf[i]);
	//}
	//正确写法
	for(int i = 0;i<len;i++){
    
    
		System.out.print(cbuf[i]);
	}
	//另一种写法
	String str = new String(cbuf,0,len);
	System.out.print(str);
}
//4. 流的关闭

从内存中写出数据到硬盘的文件中

//1.实例化File类对象,指明要写出到的文件
File file = new File("hello.txt");

//2.提供fileWriter对象,用于文件的写出
FileWriter fw = new FileWriter(file);
//3.写出操作
fw.witer("i have a dream");
//4.流资源的关闭
fw.close();

总结:如果文件不存在,在输入的过程中,会自动创建该文件。
如果存在:如果流使用的构造器是FileWriter(file,false);就不会被覆盖,如果使用的是FileWriter(file)就会对原有文件进行覆盖。

先读进来再写出去

@Test
    public void  method() throws IOException {
    
    

        //指明读入文件的位置
        File fileRead = new File("hello.txt");
        //指明写出文件的位置
        File fileWriter = new File("hello1.txt");
        //创建输入流和输出流对象
        FileReader fr = new FileReader(fileRead);
        FileWriter fw = new FileWriter(fileWriter);

        //创建字符数组
        int len;
        char[] chars = new char[5];
        while ((len = fr.read(chars))!= -1){
    
    
            //每次写入len个长度的字符
            fw.write(chars,0,len);
        }
        //关闭流
        fr.close();
        fw.close();
    }

实际应用中使用try catch finally 保证流得到关闭。

猜你喜欢

转载自blog.csdn.net/weixin_43941676/article/details/108329943