IO流

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

文件的复制

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

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值