Java基础(十)IO流基础

IO流概述和分类

io流用来处理设备之间的数据传输<常见英语:文件复制,上传文件和下载文件>

io流分类
输出流FileWriter
构造方法:
FileWriter(String fileName):传递一个文件名称
输出流写数据的步骤:
1.创建输出流对象
(a.调用系统资源创建了一个文件
b.创建输出流对象
c.把输出流对象指向文件)
2.调用输出流对象的写数据的方法
写一个字符串数据
对象.write("");
数据没有直接写到文件,其实是写到了内存缓冲区
对象.flush();
3.释放资源<.通知系统释放和该文件相关的资源>
对象.close();

FileWriter写数据的方法:
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):写一个字符数组的一部分数据

FileWriter fw=new FileWriter("b.txt");//1.创建输出流对象
	//void write(String str):写一个字符串数据
	fw.write("i love the world");//调用输出流对象的写数据的方法
	 //void write(String str,int index,int len):写一个字符串中的一部分数据
	fw.write("i love the world", 4, 7);
	//void write(int ch):写一个字符串数据,
	//这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int值  ‘a’  97
	fw.write(97);
	fw.write("a");
	//void write(char[] chs):写一个字符数组数据
	char[]chs= {'b','c','d','e'};
	fw.write(chs);
	//void write(char[] chs,int index, int len):写一个字符数组的一部分数据
	fw.write( chs,1,2);
	fw.close();//.释放资源
}

如何实现数据的换行
\n可以实现换行,但Windows自带的记事本打开未换行
window识别的换行是\r\n
linux \n
mac \r
如何实现数据的追加写入
FileWriter(String fileName,boolean append)追加是true 默认是false

FileWriter fw=new FileWriter("c.txt",true);//创建对象,追加数据
	
	for(int i=0;i<10;i++) {
	fw.write("hello"+i);
	fw.write("\r\n");//换行}
	
	
	fw.flush();
	fw.close();

输入流FileReader(读数据)
需求:从文件中读取数据并显示到控制台
输入流文件的步骤:
1.创建输入流对象
2.调用输入流对象的读数据方法
3.释放资源
成员方法
int read():一次读取一个字符,
int read(char[] cbuf):一次读一个字符数组的数据,返回的是实际读取的字符个数

public static void main(String[] args) throws IOException {
		FileReader fr=new FileReader("IoDemo02.java");
		int ch;
		while((ch=fr.read())!=-1) {
			System.out.print((char)ch);
		}
		fr.close();
	}

需求:
把项目路径下的IoDemo.java中的内容复制到项目路径下的Copy.java中
文件复制是有规律可循的
数据源:IoDemo.java------读数据-------FileReader
目的地:Copy.java----------写数据---------FileWriter

FileWriter fw=new FileWriter("Copy.java");//创建输出流对象
	FileReader fr=new FileReader("IoDemo02.java");//创建输入流对象
	int ch;
	while((ch=fr.read())!=-1) {
		fw.write(ch);
	}
	fw.close();
	fr.close();

通过测试实际读取长度为-1时,则无数据了

FileReader fr=new FileReader("IoDemo02.java");
	char[] chs=new char[1024];//实际开发中写1024或1024的整数倍
	int len;
	while((len=fr.read(chs))!=-1) {
		System.out.print(new String(chs,0,len));
	}
	fr.close();
}

把项目路径下的IoDemo.java中的内容复制到项目路径下的Copy01.java中
采用int read(char[] cbuf)方法

	FileWriter fw=new FileWriter("Copy01.java");
	FileReader fr=new FileReader("IoDemo02.java");
	char[]chs=new char[1024];
	int len;
	while((len=fr.read(chs))!=-1) {
		fw.write(new String(chs,0,len));
	}
	fw.close();
	fr.close();

字符缓冲流BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组、字符串的写入
创建输出缓冲流
BufferedWriter bw=new BufferedWriter(new FileWriter(“a.txt”));
BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取

BufferedWriter bw=new BufferedWriter(new FileWriter("a.txt"));
	bw.write("hello world");
	bw.close();
	BufferedReader br=new BufferedReader(new FileReader("IoDemo02.java"));
	
	  int ch; 
	  while((ch=br.read())!=-1) 
	  { System.out.print((char)ch); }
	 
	int len;
	char[] chs=new char[1024];
	while((len=br.read(chs))!=-1) {
		System.out.print(new String(chs,0,len));
	}
}

练习:字符缓冲流复制文件
把项目路径下的IoDemo.java中的内容复制到项目路径下的Copy02.java中

BufferedWriter bw=new BufferedWriter((new FileWriter("Copy02.java")));//创建输出缓冲流对象
	BufferedReader br=new BufferedReader(new FileReader("IoDemo02.java"));//创建输入缓冲流对象
    int ch;
    while((ch=br.read())!=-1) {
    	bw.write((char)ch);
    }
    bw.close();
    br.close();
}    
	BufferedWriter bw=new BufferedWriter(new FileWriter("Copy03.java"));
		BufferedReader br=new BufferedReader(new FileReader("IoDemo02.java"));
		int len;
		char[]chs=new char[1024];
		while((len=br.read(chs))!=-1) {
			bw.write(new String(chs,0,len));
		}
		br.close();
		bw.close();

字符缓冲流的特殊功能:
BufferedWriter void newLine():写一个换行符,这个换行符由系统决定
BufferedReader String readLine():一次读取一行数据,但是不读取换行符

BufferedWriter bw=new BufferedWriter(new FileWriter("a1.txt"));
	for(int i=0;i<10;i++) {
		bw.write("hello"+i);
		bw.newLine();
	}
	bw.close();
	BufferedReader br=new BufferedReader(new FileReader("a1.txt"));
	String line;
	while((line=br.readLine())!=null) {
		System.out.println(line);
	}

练习1:构造五种复制文件的方法

String srcFileName="IoDemo02.java";
	String DesFileName="Copy05.java";
	method1( srcFileName, DesFileName);
	method2( srcFileName, DesFileName);
	method3( srcFileName, DesFileName);
	method4( srcFileName, DesFileName);
	method5( srcFileName, DesFileName);
	
}
public static void method1(String srcFileName,String DesFileName) throws IOException {
	FileWriter fw=new FileWriter(DesFileName);
	FileReader fr=new FileReader(srcFileName);
	int ch;//基本缓冲一次读一个字符
	while((ch=fr.read())!=-1) {
		fw.write((char)ch);
	}
	fw.close();
	fr.close();
}
public static void method2(String srcFileName,String DesFileName) throws IOException {
	FileWriter fw=new FileWriter(DesFileName);
	FileReader fr=new FileReader(srcFileName);
	int len;//基本缓冲一次读一个字符数组
	char[]chs=new char[1024];
	while((len=fr.read(chs))!=-1) {
		fw.write(new String(chs));
	}
	fw.close();
	fr.close();
}
public static void method3(String srcFileName,String DesFileName) throws IOException {
	BufferedWriter bw=new BufferedWriter(new FileWriter(DesFileName));
	BufferedReader br=new BufferedReader(new FileReader(srcFileName));
	int ch;//字符缓冲一次读一个字符
	while((ch=br.read())!=-1) {
		bw.write((char)ch);
	}
	bw.close();
	br.close();
}
public static void method4(String srcFileName,String DesFileName) throws IOException {
	BufferedWriter bw=new BufferedWriter(new FileWriter(DesFileName));
	BufferedReader br=new BufferedReader(new FileReader(srcFileName));
	int len;//字符缓冲流一次读一个数组
	char[]chs=new char[1024];
	while((len=br.read(chs))!=-1) {
		bw.write(new String(chs));
	}
	bw.close();
	br.close();
}
public static void method5(String srcFileName,String DesFileName) throws IOException {
	BufferedWriter bw=new BufferedWriter(new FileWriter(DesFileName));
	BufferedReader br=new BufferedReader(new FileReader(srcFileName));
	String line;//按行读取
	while((line=br.readLine())!=null) {
		bw.write(line);
		bw.newLine();
	}
	bw.close();
	br.close();
	
}

练习2:把ArrayList集合中的字符存储到文本文件
把每一个字符串元素作为文件中的一行数据
分析1.
创建集合对象
2.往集合对象中添加字符串元素
3.创建输出缓冲流对象
4.遍历集合,得到每一个字符串元素,然后把该字符串元素作为数据写到文本文件中
5.释放资源

ArrayList<String> arr=new ArrayList<String>();
	for(int i=0;i<10;i++) {
		arr.add("hello"+i);
	}
	BufferedWriter bw=new BufferedWriter(new FileWriter("a2.txt"));
	for(int j=0;j<arr.size();j++) {
		bw.write(new String(arr.get(j))
				);
		bw.newLine();
	}
	bw.close();
}

练习3:把文本中的数据读取到集合中


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


//练习把文本文件读取到集合中
/*
 * 1.创建字符输入流对象
 * 2.创建集合对象
 * 3.读取数据添加到集合中
 * 4.释放资源*/

public class test02 {
public static void main(String[] args) throws IOException  {
BufferedReader br=new BufferedReader(new FileReader("a2.txt"));
ArrayList<String> arr=new ArrayList<String>();
String line;
while((line=br.readLine())!=null) {
	arr.add(line);
	arr.add("\r\n");
}
System.out.println(arr);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值