A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

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是跳出方法.方法都终止了.还有什么循环
                }
        }
       
       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马