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));
}
}
}