java流(IO流)的分类,文件续写、读入

流(IO流)的分类,写出流FileWriter

package com.qianfeng.test;

import java.io.FileWriter;
import java.io.IOException;

/*
 * 流(IO流):input-output-stream。作用:实现两个设备之间的通信。
 * 设备:内存,硬盘(磁盘	),控制台,键盘,文件,网络。
 * 网络:在网络上,你的主机之外的环境。
 * 
 * 流的分类:
 * 根据流的操作的方式分类:输入流和输出流
 * 根据数据的类型分类:字节流和字符流
 * 
 * 字节流:传输的是字节,可以传输任意类型的数据。----视频,音频,文件,图片等。
 * 字符流:传输的也是字节,不同点在于传输过程中加入了编码的操作,让我们在传输字符的时候更加便捷。----文件。
 * 
 * 以内存为参考
 * 字节流:--对应的父类
 * 字节输入流:InputStream
 * 字节输出流:OutputStream
 * 
 * 字符流:--对应的父类
 * 字符读入流(将数据输入内存):Reader
 * 字符写出流(将数据从内存取出):Writer
 * 
 * 先处理字符流:
 * 实例:以磁盘的存储为例,将内容写入文件
 * 分析:
 * 因为传输的是字符----字符流
 * 因为是从内存传出----写出流--FileWriter
 * 
 */
public class Demo2 {

	public static void main(String[] args) throws IOException {
		
		//创建写出流对象
		/*
		 * 注意点一:关联文件的特点:如果之前不存在,程序会自动创建一个,如果已经存在,直接使用,但是会将原文件的内容覆盖。
		 * 注意点二:如果只写名字,不写具体的路径,默认的路径是当前的工程。
		 * 注意点三:我们可以指定自己的路径,但是一定要保证路径存在,否则报异常FileNotFoundException
		 */
		FileWriter fileWriter = new FileWriter("temp1.txt");
		
		//调用写出方法
		/*
		 * 注意点四:在执行write方法时,数据被临时写入了流对象的内部数组中,这是一个字节数组,会默认去查编码表。
		 */
		fileWriter.write("bingbingAndChenchen");
		
		//调用刷新方法--会将内容真正的写入文件。
		//fileWriter.flush();
		
		//关闭流--a:将流关闭	b:刷新
		//注意点五:流使用完后必须关闭。
		fileWriter.close();
		
		//注意点六:当流对象关闭,不能再进行任何操作,否则报异常java.io.IOException: Stream closed
		//fileWriter.write("张三");
		
	}
}

文件的续写:FileWriter(String file,boolean value)

package com.qianfeng.test;

import java.io.FileWriter;
import java.io.IOException;

/*
 * 文件的续写:FileWriter(String file,boolean value)
 * 当value为true的时候,不会将原来的内容删除。
 * 
 * \:是转义字符	\t:制表符		\\:普通的斜杠
 * 实现换行:\r\n----window下的换行。	linux:\n
 * 
 */
public class Demo3 {

	public static void main(String[] args) {
		FileWriter fileWriter = null;
		// 创建对象并关联文件
		try {
			fileWriter = new FileWriter("temp2.txt", true);

			// 写
			fileWriter.write("bingbing");
			fileWriter.write("\r\n");
			fileWriter.write("zhangsan");

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭
			if (fileWriter != null) {
				try {
					fileWriter.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

文件读入,read()一个字符一个字符的读

package com.qianfeng.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/*
 * 实例:将数据从文件中取出--文件读入流(FileReader)
 */
public class Demo4 {

	public static void main(String[] args) throws IOException {
		
		//创建对象并关联文件。关联的文件必须存在。
		FileReader fileReader = new FileReader("temp2.txt");
		
		//读
		/*
		 * 两种方式:
		 * 第一种:read()----一个字符一个字符的读
		 * 第二种:read(字符数组)--一次可以读取多个字符,将读到的字符临时存储到了这个数组中
		 */
		
		//第一种:read()----一个字符一个字符的读
		//a:会将当前的字符读出	b:将当前的指针后移一个字符
		int data;
//		data = fileReader.read();//这里得到的ASCII值
//		System.out.println((char)data);
//		data = fileReader.read();
//		System.out.println((char)data);
//		data = fileReader.read();
//		System.out.println((char)data);
//		data = fileReader.read();
//		System.out.println((char)data);
//		data = fileReader.read();
//		System.out.println((char)data);
//		data = fileReader.read();
//		System.out.println(data);//这里返回的是-1,代表读完了。
		while((data = fileReader.read()) != -1){
			System.out.println((char)data);
		}
		
		//关闭流
		fileReader.close();
		
	}
}

文件读入,read(字符数组)一次可以读取多个字符

package com.qianfeng.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Demo5 {

	public static void main(String[] args) throws IOException {
		
		//创建对象并关联文件。关联的文件必须存在。
		FileReader fileReader = new FileReader("temp2.txt");
				
		//第二种:read(字符数组)--一次可以读取多个字符,将读到的字符临时存储到了这个数组中.
		/*
		 * 数组是临时存放数据的地方,我们会将读到的字符放到数组中,数组的大小决定了我们一次可以读到的字符个数。
		 * 但是从内存的角度考虑,临时数组并不是越大越好,一般数组的大小在1kb左右。
		 * 
		 * 返回值:代表的是本次读到的真实字符个数,如果返回值是-1代表读完了。
		 */
		char[] arr = new char[2];
		int num;
//		num = fileReader.read(arr);
//		System.out.println(new String(arr,0,num)+"  "+num);
//		num = fileReader.read(arr);
//		System.out.println(new String(arr,0,num)+"  "+num);
//		num = fileReader.read(arr);
//		System.out.println(new String(arr,0,num)+"  "+num);//代表将字符数组从下标0开始的num个字符转成字符串。
//		num = fileReader.read(arr);
//		System.out.println(new String(arr)+"  "+num);//-1,说明读完了
		
		while((num=fileReader.read(arr))!=-1){
			System.out.println(new String(arr,0,num)+"  "+num);
		}
		
		//关闭流
		fileReader.close();
	}
}

相对路径和绝对路径,内容拷贝

package com.qianfeng.test;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
 * 路径的讲解:
 * 相对路径和绝对路径
 * 实例:D:\\workspace\\32\\BigData1715N19\\src\\com\\qianfeng\\test\\Demo1.java  绝对路径
 * 		com\\qianfeng\\test\\Demo1.java	   相对路径
 * 相对路径:从路径中间的某个部位开始一直到当前的文件名字。
 * 绝对路径:一个文件的完整路径,即从根目录开始的路径。
 * 
 * 路径中的/	\是转义字符	\\==/
 * 
 */

public class Demo6 {

	public static void main(String[] args) throws IOException, InterruptedException {
		
		//实例:实现文件的赋值
		//要求:将Demo1的内容拷贝到temp3.txt
		//1.创建读入流和写出流并关联对应的文件。
		
		FileReader fileReader = new FileReader("src\\com\\qianfeng\\test\\Demo2.java");
		FileWriter fileWriter = new FileWriter("temp3.txt");
		
		//2.读写
		//一次读多个字符
//		char[] arr = new char[10];
//		int num;
//		while((num=fileReader.read(arr))!=-1){
//			//将字符数组的部分内容写入文件
//			fileWriter.write(arr,0,num);
//		}
		
		//一次读一个字符
		int num;
		while((num=fileReader.read())!=-1){
			fileWriter.write(num);//write()自带了编码
		}
		
		//3.关闭资源
		fileReader.close();
		fileWriter.close();
		
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值