流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
文件的复制
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class _05Cooy_all {
/**19
* 1 文件复制 : 本质就是输入和输出
* 1 完成文件输入
* 2 完成文件输出
* 3 把输入读取到的数据,通过输出流输出(把打印到控制台,换成输出流的写出即可)
* 2 获取指定目录下所有子目录
* 1 获取目录对象
* 2 获取该目录的直接子目录
* 3 获取该目录的所有后代目录(遍历子目的,得到孙目录,在遍历.....)
* 3 整合所有后代目录和文件复制
* 1 获取到所有后代目录的文件对象
* 2 通过文件对象获取文件的全路径
* 3 判断目标全路径目录是否存在,不存在就创建
* 4 通过全路径就可以创建输入流和输出流
* 5 输出
*/
public static void main(String[] args) {
//被复制目标路径
File file = new File("E:\\0");
checkMenu(file);
System.out.println("完成");
}
public static void checkMenu(File f){
// 判断是否是文件
if (f.isFile()) {
// 获得全路径
String filePath = f.getAbsolutePath();
// 设置新路径 设置关键是substring
String newFilePath = "E:/copy"+filePath.substring(2);
// 判断目标目录是否存在
File parentFile = new File(newFilePath).getParentFile();
if (!parentFile.exists()) {
// 不存在就递归创建
parentFile.mkdirs();
}
// 到这里 目标目录 一定存在
try (
FileInputStream fis = new FileInputStream(filePath);
FileOutputStream fos = new FileOutputStream(newFilePath);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
){
byte[] bytes = new byte[10240000];
int tmp = 0;
while ((tmp = bis.read(bytes)) != -1) {
bos.write(bytes, 0, tmp);
}
bos.flush();
} catch (Exception e) {
e.printStackTrace();
}
return;
}
// 不是文件就获取它所有的子文件,再把所有的子文件递归传入
File[] fs = f.listFiles();
for (File file : fs) {
checkMenu(file);
}
}
}
代码优化 降低低耦合
package Work_01;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 19 多文件内容合并读问题: 任意给定多个文本文件路径合并为一个大的文本文件, 并保存名为merge.txt。
* 1)、如给定"one.txt”,“two.txt”,“three.txt"三个文本文件路径
* 2)、内部分别存储内容"内容One"、“内容Two”、“内容Three"
* 3)、合并完成后merge.txt的结果为三行文字,分别为“内容One"、"内容Two"、"内容Three"
*/
public class IO_MergeThree {
public static void main(String[] args) throws IOException {
// 写入内容
FileWriter fw = new FileWriter("E:/a/one.txt");
fw.write("内容One");
fw.flush();
FileWriter fw2 = new FileWriter("E:/b/two.txt");
fw2.write("内容Two");
fw2.flush();
FileWriter fw3 = new FileWriter("E:/c/three.txt");
fw3.write("内容Three");
fw3.flush();
// 写出merge
FileWriter os = new FileWriter("E:/merge.txt");
// 添加缓冲流
BufferedReader bs1 = new BufferedReader(new FileReader("E:/a/one.txt"));
BufferedReader bs2 = new BufferedReader(new FileReader("E:/b/two.txt"));
BufferedReader bs3 = new BufferedReader(new FileReader("E:/c/three.txt"));
BufferedWriter bo = new BufferedWriter(os);
// 第一次输出
char[] c0 = new char[1024];
int tem0 = 0;
while ((tem0 = bs1.read(c0)) != -1) {
// 字节输出
bo.write(new String(c0, 0, tem0));
}
bo.write("\n");
bo.flush();
// 第二次输出
char[] c1 = new char[1024];
int tem1 = 0;
while ((tem1 = bs2.read(c1)) != -1) {
// 字节输出
bo.write(c1, 0, tem1);
}
bo.write("\n");
bo.flush();
// 第三次输出
char[] c2 = new char[1024];
int tem2 = 0;
while ((tem2 = bs3.read(c2)) != -1) {
// 字节输出
bo.write(c2, 0, tem2);
}
bo.flush();
}
}
package Work_01;
/**
* 1 编码实现一个压缩包a.rar文件的复制。
*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class IO_01_copy {
public static void main(String[] args) throws IOException {
//读取
FileInputStream is = new FileInputStream("E:/work/a.rar");
//写出
FileOutputStream os = new FileOutputStream("E:/a.rar");
//添加缓冲流
BufferedInputStream bs=new BufferedInputStream(is);
BufferedOutputStream bo=new BufferedOutputStream(os);
byte[] bytes = new byte[10240];
int tem = 0;
while ((tem = bs.read(bytes)) != -1) {
//字节输出
bo.write(bytes, 0, tem);
}
bo.flush();
}
}
package Work_01;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Set;
import java.util.TreeSet;
/**19
* 文件input.txt中存放着10行数字,为0至6区间的整数,
* 求10行数字去重后还有多少行?分别是哪些数字?排序序出。
*/
public class IO_list {
public static void main(String[] args) throws IOException {
//添加缓冲流
BufferedReader bi=new BufferedReader(new FileReader("E:/input.txt"));
//添加Set比较
TreeSet<Integer> li=new TreeSet<Integer>();
String tem=null;
//字符串存储读取
byte[] bytes=new byte[10240];
while((tem=bi.readLine())!=null){
li.add(Integer.parseInt(tem));
}
System.out.println("去重后剩余"+li.size()+"行");
System.out.println(li);
}
}