IO流-小结
![]()
![]()
/*
需求:
把 X:\\XXX\\XXX.mp4 复制到模块目录下的 XXX.mp4
思路:
1:根据数据源创建字节输入流对象
2:根据目的地创建字节输出流对象
3:读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
4:释放资源
*/
//第4种方式:字节缓冲流一次读写一个字节数组 (效率最高的方法)
public static void main(String[] args) throws IOException{
//根据数据源创建字节缓冲输入流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("x:\\xxx.mp4"));
//根据目的地创建字节缓冲输出流对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("xxx.mp4"));
//读写数据, 复制文件
byte [] bys = new byte[1024];
int len;
while((len=bis.read(bys))!=-1){
bos.write(bys,0,len);
}
//释放资源
bis.close();
bos.close();
}
//其他方法参考"字节流2中复制视频(大文件)"
![]()
![]()
//复制字符文件最常用的方法----字符缓冲流的特有方法--标准格式
public static void main(String[] args) throws IOException {
//根据数据源创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("x:\\x\\xxx.txt"));
//根据目的地创建字符缓冲输出流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("xxx.txt"));
//读写数据, 复制文件, 用字符缓冲流特有功能实现
String line;
while ((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
//释放资源
br.close();
bw.close();
}
案例
![]()
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
/*
案例:集合到文件
需求:把ArrayList集合中的字符串数据写入到文本文件。要求:每一个字符串元素作为文件中的一行数据
思路:
1. 创建ArrayList集合
2. 往集合中存储字符串元素
3. 创建字符缓冲输出流对象
4. 遍历集合,得到每一个字符串数据
5. 调用字符缓冲输出流对象的方法写数据
6. 释放资源
*/
public class List_To_File {
public static void main(String[] args) throws IOException {
//1. 创建ArrayList集合
ArrayList<String> arr = new ArrayList<>();
//2. 往集合中存储字符串元素
arr.add("hello,");
arr.add("world,");
arr.add("java,");
arr.add("example.");
//3. 创建字符缓冲输出流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("Arr.txt"));
//4. 遍历集合,得到每一个字符串数据
for (String string:arr){
//5. 调用字符缓冲输出流对象的方法写数据
bw.write(string);
bw.newLine();
bw.flush();
}
//6. 释放资源
bw.close();
}
}
![]()
package IO.Example;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
/*
案例:文件到集合
需求:把文本文件中的数据读取到集合中,并遍历集合。
要求:文件中每一行数据是一个集合元素
思路:
① 创建字符缓冲输入流对象
② 创建ArrayList集合对象
③ 调用字符缓冲输入流对象的方法读数据
④ 把读取到的字符串数据存储到集合中
⑤释放资源
6.遍历集合
*/
public class File_to_List {
public static void main(String[] args) throws IOException {
//① 创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("Arr.txt"));
//② 创建ArrayList集合对象
ArrayList<String> arr =new ArrayList<>();
//③ 调用字符缓冲输入流对象的方法读数据
String line;
while ((line=br.readLine())!=null){
//④ 把读取到的字符串数据存储到集合中
arr.add(line);
}
//⑤释放资源
br.close();
//6.遍历集合
for (String s:arr){
System.out.println(s+",");
}
}
}
![]()
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
/*
案例:点名器
需求:我有一个文件里面存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名器
思路:
1. 创建字符缓冲输入流对象
2. 创建ArrayList集合对象
3. 调用字符缓冲输入流对象的方法读数据
4. 把读取到的字符串数据存储到集合中
5. 释放资源
6. 使用Random产生一个随机数,随机数的范围在:[0,集合的长度)
7. 把第6步产生的随机数作为索引到ArrayList集合中获取值
8. 把第7步得到的数据输出在控制台
*/
public class Call_name {
public static void main(String[] args) throws IOException {
//1. 创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("Arr.txt"));
//2. 创建ArrayList集合对象
ArrayList<String> arrayList = new ArrayList<>();
//3. 调用字符缓冲输入流对象的方法读数据
String line;
while ((line=br.readLine())!=null){
//4. 把读取到的字符串数据存储到集合中
arrayList.add(line);
}
//5. 释放资源
br.close();
//6. 使用Random产生一个随机数,随机数的范围在:[0,集合的长度)
Random r = new Random();
int index = r.nextInt(arrayList.size());
//7. 把第6步产生的随机数作为索引到ArrayList集合中获取值
String name = arrayList.get(index);
//8. 把第7步得到的数据输出在控制台
System.out.println("幸运者是: "+name);
}
}