public class Test5 {
/**
* 加密一个文件夹所有内容
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// File file = getFile();
File dir = getFile();
File dir2 = getFile();
// secretDir(file, dir);
//解密
secretDir(dir, dir2);
}
/*
* 拷贝一个文件夹copyDir()
* 返回值类型void
* 参数列表 需要File file(要拷贝的) File dir(拷贝放哪)
* 分析
* 0.定义一个小数组
* 1.定义一个fileArr数组 通过listFile()获取数组
* 2.定义一个文件输入流和输出流.接收Null
* 3.通过length来遍历这个数组
* 4.通过输入流得到filearr[] 输出流得到 new File(dir,filearr[].getName)
* 5.通过while循环写入数据
*/
public static void secretDir(File file , File dir) throws IOException {
// byte[] arr = new byte[1024 * 8];
File[] fileArr = file.listFiles();
BufferedInputStream fis = null;
BufferedOutputStream fos = null;
for (int i = 0; i < fileArr.length; i++) {
/**
* 优化:
* 可加入判断如果是文件夹,那么在新路径创建文件夹,递归这个方法
* 加密文件夹文件后,删除原文件
*/
fis = new BufferedInputStream(new FileInputStream(fileArr[i]));
fos = new BufferedOutputStream(new FileOutputStream(new File(dir , fileArr[i].getName())));
int len;
while((len = fis.read()) != -1) {
fos.write(len ^ 123);
}
fis.close();
fos.close();
}
}
/*
* 定义一个方法获取键盘录入的文件路径,并封装成File对象返回
* 1.返回类型File
* 2.参数列表无
*/
private static File getFile() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入文件路径:");
while(true) {
String line = sc.nextLine();
File file = new File(line);//把文件名封装在File对象
if(!file.exists())
System.out.println("文件不存在,请重新输入:");
else if(file.isDirectory()){
System.out.println("您输入的是一个文件夹");
return file;
}
else
System.out.println("您输入的是一个文件");
return file;//为什么没有跳出循环,因为ruturn是跳出方法.方法都终止了.还有什么循环
}
}
}
|
|