Java-IO流

37 篇文章 0 订阅

IO流概述和分类
1-IO流用来处理设备之间的数据传输
文件复制,上传文件和下载文件
2-IO流分类
输出流:FileWrite
输入流:FileReader

FileWriter方法的简单应用

package com.it01;

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

/*
 * 	需求:向文件中写入数据
 * 		写数据------输出流-------FileWriter
 * 
 * 	构造方法FileWriter:
 * 		FileWriter(String fileName):传递一个文件名称
 * 	成员方法
 * 		void write(String str)
 * 		void flush()
 * 		void close()
 * 
 * 	输出流写数据的步骤:
 * 		1-创建输出流对象
 * 		2-调用输出流写数据的方法
 * 		3-释放资源
 */

public class FileWriterDemo {
	public static void main(String[] args) throws IOException {
		//创建输出流对象	1-调用系统资源创建一个文件 2-创建输出流对象 3-把输出流指向文件
		FileWriter fw = new FileWriter("D:\\eclipse\\myIO\\a.txt");
		
		//写方法
		fw.write("IO流你好");
		//数据没有直接写如文件,写入了内存缓冲区
		fw.flush();
		//释放资源
		fw.close();
		
	}
}

package com.it01;

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

/*
 * 1-创建输出流对象
 * 2-调用输出流写数据的方法,并刷新缓冲区
 * 3-释放资源
 * 
 *     相对路径:相对当前项目而言
 *     绝对路径:以盘符开始
 *     
 *  close()和flush()的区别:
 *  		flush():刷新缓冲区
 *  		close():先刷新,在释放资源
 * 
 */
public class FileWriterDemo2 {
	public static void main(String[] args) throws IOException {
		FileWriter fw = new FileWriter("D:\\eclipse\\myIO\\a.txt");
		
		//写方法
		fw.write("hello world");
		//数据没有直接写如文件,写入了内存缓冲区
		fw.flush();
		
		fw.write("java");
		fw.flush();
		//释放资源
		fw.close();
	}
}

FileWriter的几种写数据的方法

package com.it01;

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

/*
 * 	void write(String str):写一个字符串数据
	void write(String str,int index,int len):写一个字符串中的一部分数据
	void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97
	void write(char[] chs):写一个字符数组数据
	void write(char[] chs,int index,int len):写一个字符数组的一部分数据
 */
public class FileWriterDemo3 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		FileWriter fw = new FileWriter("D:\\eclipse\\myIO\\b.txt");
		fw.write("abcde");
		fw.write("\n");
		fw.flush();
		
		fw.write("abcde",0,3);
		fw.write("\n");
		fw.flush();
		
		fw.write('a');
		fw.write("\n");
		fw.flush();
		
		fw.write(97);
		fw.write("\n");
		fw.flush();
		
		char[] chs= {'a','b','c','d'};
		fw.write(chs);
		fw.write("\n");
		fw.flush();
		
		fw.write(chs,0,2);
		fw.write("\n");
		fw.flush();
		
		fw.close();
	}

}

FileWriter--------实现追加写入-FileWriter(String filename,boolean append)

package com.it01;

import java.io.FileWriter;
import java.io.IOException;
/*
 * 	\n可以实现换行,但是windows自带的记事本打开没有换行,因为windows实现换行是\r\n
 * 	windows-\r\n
 * 	linux-\n
 * 	mac-\r
 * 
 * 	实现追加写入-FileWriter(String filename,boolean append)
 */

public class FileWriterDemo4 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//true-追加
		FileWriter fw = new FileWriter("D:\\eclipse\\myIO\\c.txt",true);
		
		for (int x=0;x<4;x++) {
			fw.write("hello"+x);
			fw.write("\r\n");
			fw.flush();
		}
		fw.close();
	}

}

FileReader的简单应用

package com.it02;

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

/*
 * 	需求:读入数据并显示
 * 		读数据------输入流-------FileReader
 * 
 * 	构造方法
 * 		FileReader(String filename):传递文件内容
 * 
 * 	输入流读文件的步骤:
 * 		1-创建输入流对象
 * 		2-调用读数据方法
 * 		3-释放资源
 */
public class FileReaderDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//创建输入流对象
		FileReader fr = new FileReader("D:\\eclipse\\myIO\\src\\com\\it01\\FileWriterDemo4.java");
		
		//读方法
		//int read():一次读取一个字符
//		int ch = fr.read();
//		System.out.println(ch);
//		System.out.println((char)ch);
//		
//		//第二次读取
//		ch = fr.read();
//		System.out.println(ch);
//		System.out.println((char)ch);
//		
//		//第三次
//		ch = fr.read();
//		System.out.println(ch);
//		System.out.println((char)ch);
		
		//利用循环实现
		int ch;
		
		while((ch=fr.read())!=-1) {
			System.out.print((char)ch);
		}
		
		//释放资源
		fr.close();
		
		

	}

}

package com.it02;

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

/*
 * 	 输入流读数据的方法
 * 		1-创建输入流对象
 * 		2-调用读数据方法
 * 		3-释放资源
 */
public class FileReaderDemo2 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileReader fr = new FileReader("fr.txt");
		
		/*
		//读数据
		//int read(char[] cbuf):一次读一个字符数组,返回的是实际读取字符的个数
		
		char[] chs = new char[5];
		
		//第一次读数据
		int len = fr.read(chs);
		System.out.println("len:"+len);
		//通过字符数组将字符数组转换成字符串
		System.out.println(new String(chs,0,len));
		
		//第二次读取
		len = fr.read(chs);
		System.out.println("len:"+len);
		//通过字符数组将字符数组转换成字符串
		System.out.println(new String(chs,0,len));
		
		//第三次读取
		len = fr.read(chs);
		System.out.println("len:"+len);
		//通过字符数组将字符数组转换成字符串
		System.out.println(new String(chs,0,len));
		**/
		
		//循环改进读取代码
		//char[] chs = new char[1024],1024及其整数倍
		char[] chs = new char[1024];
		int len;
		while((len=fr.read(chs))!=-1) {
			System.out.print(new String(chs,0,len));
		}
		
		//释放资源
		fr.close();
		
		
	}

}

FileReader 读取文件的两种方式图解
在这里插入图片描述

BufferedStream读写文件的应用

package com.it04;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
    *     BufferedWriter将文本写入到字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
    *     BufferedReader从字符输入流读取文本,缓冲各个字符,从而提供单个字符、数组和行的高效读取。
    *     
    *     
 */
public class BufferedStreamDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//创建输出缓冲流对象BufferedWriter,传递的是FileWriter的对象
		
		 
		BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
		bw.write("hello");
		bw.flush();
		bw.close();
		
		
		//创建输入流对象
		BufferedReader br = new BufferedReader(new FileReader("D:\\eclipse\\myIO\\src\\com\\it01\\FileWriterDemo4.java"));
		
		//一次读取一个字符
		int ch;
		while((ch=br.read())!=-1) {
			System.out.print((char)ch);
		}
		
		//一次读取一个字符数组
		char[] chs = new char[1024];
		int len;
		while((len=br.read(chs))!=-1) {
			System.out.println(new String(chs,0,len));
		}
		//释放资源
		br.close();
		
		

	}

}

缓冲流的特殊功能

package com.it05;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
 * 	缓冲流的特殊功能
 * 	 BufferedWriter
 		void newLine():写一个换行符,这个换行符由系统决定,不同的操作系统newLine()方法使用的换行符不同
        windows:\r\n 
        linux:\n 
        mac:\r
     BufferedReader
 		String readLine():一次读取一行数据,但是不读取换行符
 * 
 */
public class BufferedStreamDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		//第一个方法的实例---newLine():写一个换行符
		BufferedWriter bw = new BufferedWriter(new FileWriter("bw2.txt"));
		for(int x=0; x<10; x++) {
			bw.write("hello"+x);
			//bw.write("\r\n");
			bw.newLine();
			bw.flush();
		}
		//释放资源
		bw.close();
		
		//第二个方法的实例----readLine():一次读取一行数据,但是不读取换行符
		BufferedReader br = new BufferedReader(new FileReader("bw2.txt"));
		
		/*
		String line = br.readLine();
		System.out.println(line);
		
		line = br.readLine();
		System.out.println(line);
		
		line = br.readLine();
		System.out.println(line);
		
		line = br.readLine();
		System.out.println(line);
		*/
		
		String line;
		
		//判断line != null
		while((line=br.readLine())!=null) {
			System.out.println(line);
		}
		
		//释放资源
		br.close();
		
		

	}

}

复制文件的5种方式

A:利用基本流一次读写一个字符
B:利用基本流一次读写一个字符数组
C:利用缓冲流一次读写一个字符
D:利用缓冲流一次读写一个字符数组
E:利用缓冲流的特有方法一次读写一个字符串

package com.it03;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CopyFileDemo5 {

	public static void main(String[] args) throws IOException {
		// TODO 复制文本的5种方式
		String srcFileName  = "D:\\eclipse\\myIO\\src\\com\\it01\\FileWriterDemo4.java";
		String destFileName = "Copy3.java";
		
	    //编写5种复制文件的方法
		method1(srcFileName,destFileName);
		method2(srcFileName,destFileName);
		method3(srcFileName,destFileName);
		method4(srcFileName,destFileName);
		method5(srcFileName,destFileName);
		
		

	}
	//第一种方式复制文件-----基本流一次读写一个字符
	public static void method1(String srcFileName,String destFileName)throws IOException {
		//输入流对象
		FileReader fr = new FileReader(srcFileName);
		
		//输出流对象
		FileWriter fw = new FileWriter(destFileName);
		
		//一次读写一个字符
		int ch;
		while((ch=fr.read())!=-1) {
			fw.write(ch);
			fw.flush();
			
		}
		fw.close();
		fr.close();
		
	}
	//第二种方式复制文件-一次读写一个字符数组
	public static void method2(String srcFileName,String destFileName)throws IOException {
		//输入流对象
		FileReader fr = new FileReader(srcFileName);
		
		//输出流对象
		FileWriter fw = new FileWriter(destFileName);
		
		//一次读写一个字符数组
		
		char[] chs = new char[1024];
		int len;
		while((len=fr.read(chs))!=-1) {
			fw.write(chs,0,len);
			fw.flush();
			
		}
		fw.close();
		fr.close();
		
	}
	
	//第三种方式复制文件-一次读写一个字符数组
	public static void method3(String srcFileName,String destFileName)throws IOException {
		//缓冲输入流对象
		BufferedReader br = new BufferedReader(new FileReader(srcFileName));
		
		//缓冲输出流对象
		BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName));
		
		//一次读写一个字符数组
		
		char[] chs = new char[1024];
		int len;
		while((len=br.read(chs))!=-1) {
			bw.write(chs,0,len);
			bw.flush();
			
		}
		bw.close();
		br.close();
		
	}
	
	//第四种方式复制文件-一次读写一个字符
	public static void method4(String srcFileName,String destFileName)throws IOException {
		//缓冲输入流对象
		BufferedReader br = new BufferedReader(new FileReader(srcFileName));
		
		//缓冲输出流对象
		BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName));
		
		//一次读写一个字符数组
		
		int ch;
		while((ch=br.read())!=-1) {
			bw.write(ch);
			bw.flush();
			
		}
		bw.close();
		br.close();
		
		
	}
	//第五种方式复制文件---使用缓冲流特殊的复制方法
	public static void method5(String srcFileName,String destFileName)throws IOException {
		//缓冲输入流对象
		BufferedReader br = new BufferedReader(new FileReader(srcFileName));
		
		//缓冲输出流对象
		BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName));
		
		//一次读写行数据
		
		String line;
		while((line=br.readLine())!=null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		bw.close();
		br.close();
		
	}

    
}

集合写入文件的方法

package com.it06;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/*
 * 把ArrayList集合中的字符串数据存储到文本文件
 * 每一个字符串元素作为文件中的一行数据
 * 
 * 分析:
 * 		A:创建集合对象
 * 		B:往集合中添加字符串元素
 * 		C:创建输出缓冲流对象
 * 		D:遍历集合,得到每一个字符串元素,然后把该字符串元素作为数据写到文本文件
 * 		E:释放资源
 */
public class ArrayListToFileTest {

	public static void main(String[] args) throws IOException {
		// TODO 
		//创建集合对象
		ArrayList<String> arr = new ArrayList<String>();
		
		//添加字符串元素
		arr.add("hello");
		arr.add("world");
		arr.add("java");
		
		//创建输出流对象
		BufferedWriter bw = new BufferedWriter(new FileWriter("c.txt"));
		
		//遍历集合得到每一个字符串元素,写入文件
		for (int x=0;x<arr.size();x++) {
			String s= arr.get(x);
			bw.write(s);
			bw.newLine();
			bw.flush();
			
		}
		//释放资源
		bw.close();

	}

}

文件内容写入集合的方法

package com.it06;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/*
 * 从文本文件中读取数据到ArrayList集合中,并遍历集合
 * 每一行数据作为一个字符串元素
 * 
 * 分析:
 * 		A:创建输入缓冲流对象
 * 		B:创建集合对象
 * 		C:读取数据,每次读取一行数据,把该行数据作为一个元素存储到集合中
 * 		D:释放资源
 * 		E:遍历集合
 */
public class FileToArrayListTest {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//创建输入流对象
		BufferedReader br = new BufferedReader(new FileReader("c.txt"));
		
		//创建集合对象
		ArrayList<String> arr = new ArrayList<String>();
		
		//读取数据
		String line;
		while ((line = br.readLine())!=null) {
			
			arr.add(line);
		}
		//释放资源
		br.close();
		
		//遍历集合
		for (int x=0;x<arr.size();x++) {
			System.out.println(arr.get(x));
		}

	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值