Java基础——I/O处理

IO流是实现Java数据输入和输出的基本手段,换而言之,Java是通过IO流与各种输入输出设备建立连接的。

IO流分为两种:字节流(byte stream)和字符流(char stream)

字节流:使用字节流读入或写出二进制数据

①文件创建

	public static void createFile() throws IOException{
		/**创建文件输出流
		 * 第二种构造方法:
		 * new FileOutputStream("path",boolean append);
		 * append 如果为true,则将字节写入文件末尾处,而不是写入文件开始处
		 */
		FileOutputStream fos = new FileOutputStream("D:/file/test1.txt");
		//写入文件的字符串
		String str = "这里可以是中文字符串";
		//将字符串还原成字节数组
		byte array[] = str.getBytes();
		//将字节数组写入目标文件
		fos.write(array);
		//关闭文件输出流
		fos.close();
	}

②文件读取与文件复制


	/**
	 * 读入与写出同时操作,即复制一个文件
	 * @throws IOException 
	 */
	public static void copyFile() throws IOException{
		//创建文件输入流,目标文件
		FileInputStream fis = new FileInputStream("D:/all/pdf/testcopy.txt");
		//创建文件输出流,复制文件
		FileOutputStream fos = new FileOutputStream("C:/testcopy.txt");
		//计算字节数
		int size = fis.available();
		/**
		 * fis.read()为字节
		 */
		for(int i = 0; i < size; i++){
			fos.write(fis.read());
			System.out.println(i);
		}
		fis.close();
		fos.close();
	}

上面是一种以字节的方式读取,并写入,速度太慢,缓冲区优化:
	/**
	 * 使用缓冲流进行读取和写入
	 * @throws IOException 
	 */
	public static void copyFile2() throws IOException{
		//创建文件输入流,目标文件
		FileInputStream fis = new FileInputStream("D:/all/pdf/testcopy.txt");
		//创建文件输出流,复制文件
		FileOutputStream fos = new FileOutputStream("C:/testcopy.txt");
		
		//输入缓冲流
		BufferedInputStream bis = new BufferedInputStream(fis);
		//输出缓冲流
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		
		//byte缓冲区:大小1M
		byte array[] = new byte[1024*10];
		
		int len = -1;	//读取字节数标记变量
		/**
		 * bis.read==-1表示文件读取完毕
		 */
		while((len=bis.read(array)) != -1){
			//将缓冲区中的数据写入文件
			bos.write(array,0,len);
		}
		//刷新缓冲区
		bos.flush();
		//关闭所有资源
		fis.close();
		fos.close();
		bos.close();
		bis.close();
		
	}

③文件写入格式化

	public void printFormat2() throws IOException{
		String arry[] = new String [3];
		arry[0] = "这是第一行|111";
		arry[1] = "这是第二行|222";
		arry[2] = "这是第三行|333";
		
		//文件写入地址
		FileOutputStream fos = new FileOutputStream("D:/nicai/arry.txt");
		//文件格式化
		PrintWriter pw = new PrintWriter(fos,true);
		for(String a:arry){
			pw.println(a);
		}
		fos.close();
		pw.close();
	}

字符流:为字符的输入和输出

注:在底层,所有的输入输出都是字节形式的,字符流只是为处理字符提供方便的方法

①文件创建

	public static void createFile2() throws IOException{
		//创建文件输出流
		FileOutputStream fos = new FileOutputStream("path");
		//写入文件的字符串,必须是英文
		String str = "There must be English!";
		//将字符串转换成字符数组
		char array[] = str.toCharArray();
		//将字符数组以字符方式写入目标文件
		for(char a : array){
			fos.write(a);
		}
		//关闭文件输出流
		fos.close();
	}
FileWriter

	public static void fileWriter() throws IOException{
		String str = "这里可以是中文的";
		int len = str.length();
		//缓冲区
		char buff[] = new char[len];
		//将字符串赋值到缓冲区
		str.getChars(0, len, buff, 0);
		//写入对象
		FileWriter fw = new FileWriter("C:/fw.txt");
		fw.write(buff);
		fw.close();
	}

②文件读取

read:一次读取一个字符

	public static void readFile() throws IOException{
		//创建文件输入流
		FileInputStream fis = new FileInputStream("path");
		//估算输入文件的字节数
		int size = fis.available();
		//以字符方式,读取每个字节的数据
		char c;
		for(int i = 0; i < size; i++){
			c = (char) fis.read();
			System.out.print(c);
		}
		//关闭输入流
		fis.close();
	}
readLine:一次读取一行字符

	/**
	 * 字符流文件读取
	 * 文件内容必须为英文
	 */
	public static void readFile2() throws IOException{
		//字符流文件对象
		FileReader fr = new FileReader("path");
		//缓冲流
		BufferedReader br = new BufferedReader(fr);
	
		//每行数据
		String str = null;
		
		/**
		 * readLine没有读到数据返回null
		 */
		while((str=br.readLine()) != null){
			System.out.println(str);
		}
		br.close();
		fr.close();
		
	}

③文件写入格式化

	public void printFormat() throws IOException{
		String arry[] = new String [3];
		arry[0] = "这是第一行|111";
		arry[1] = "这是第二行|222";
		arry[2] = "这是第三行|333";
		
		//文件写入地址
		FileWriter fw = new FileWriter("D:/nicai/arry.txt");
		//文件格式化
		PrintWriter pw = new PrintWriter(fw,true);
		for(String a:arry){
			pw.println(a);
		}
		fw.close();
		pw.close();
	}

自动生成目录

<span style="font-size:14px;">	//自动生成文件目录
	public void createDir() throws IOException{
		//自动生成的目录地址
		String path = "D:/nicai/";
		File file = new File(path);
		//判断地址是否存在
		if(!file.exists()){
			file.mkdir();
		}
		FileOutputStream fos = new FileOutputStream(path + "test.txt");
		fos.close();
	}</span>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值