zoukankan      html  css  js  c++  java
  • java课后作业2019.11.04

    一、编写一个程序,指定一个文件夹,能够自动计算出其总容量

      1、代码

     

    package HomeWork;
    
    import java.io.File;
    
    public class getFileDaxiao {
        
        public static void main(String[] args) {
            File file = new File("F:\大二\JAVA课堂\TestDir");
            File[] fileList = file.listFiles();
            long sum=0;
            for(int i=0;i<fileList.length;i++) {
                if(fileList[i].isDirectory()) {
                    sum+=getDir(fileList[i]);
                }else {
                    sum+=fileList[i].length();
                }
            }
            System.out.println("该目录的大小为:"+sum+"字节");
        }
        
        public static long getDir(File file) {
            File[] fileList = file.listFiles();
            long sum=0;
            for(int i=0;i<fileList.length;i++) {
                sum+=fileList[i].length();
            }
            return sum;
        }
    }

      2、运行结果

       3、思路

      获取目录,然后存到文件数组中,循环得出文件的大小,如果有目录,则递归执行目录的操作。

    二、编写一个文件加解密程序,通过命令行完成加解密工作

       1、代码

    package HomeWork;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    
    public class FileEncryptionAndDecrypt {
    
        public static void main(String[] args) {
            //必须用绝对路径,不然会报错
            File file = new File("F:\eclipse-jee-2019-06-R-win32-x86_64\Workspace\class20191104\2.txt");
            fileEncryptionAndDecrypt(file,1);
            fileEncryptionAndDecrypt(file,2);
        }
        
        public static void fileEncryptionAndDecrypt(File file,int choose) {
            //这个类可以改变字符串中单个字符的值
            StringBuilder strb = null;
            File newfile = new File(file.getParent()+"/newfile.txt");
            try {
                BufferedReader reader = new BufferedReader(new FileReader(file));
                BufferedWriter writer = new BufferedWriter(new FileWriter(newfile));
                String str = null;
                if(choose==1) {
                    while((str=reader.readLine())!=null) {
                        strb=new StringBuilder(str);
                        for(int i = 0;i<str.length();i++) {
                            strb.setCharAt(i, (char) (strb.charAt(i)-24));
                        }
                        writer.append(strb+"
    ");
                    }
                }else if(choose==2){
                    while((str=reader.readLine())!=null) {
                        strb=new StringBuilder(str);
                        for(int i = 0;i<str.length();i++) {
                            strb.setCharAt(i, (char) (strb.charAt(i)+24));
                        }
                        writer.append(strb+"
    ");
                    }
                }
                writer.close();
                reader.close();
                File name = file;
                file.delete();
                newfile.renameTo(name);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(file.exists()&&choose==1) {
                    System.out.println("加密成功!");
                }else if(file.exists()&&choose==2) {
                    System.out.println("解密成功!");
                }
            }
        }
    }

      2、运行结果:

      为方便观察,先进行加密操作,再进行解密操作

      (1)加密操作

       (2)解密操作

       3、思路

      首先在同文件目录下新建一个相同类型的文件,然后进行文件的读操作,读出文件的每行的内容,然后同时将改行内容加密(即ASCII值-24)后写到新的文件中,最后删除原文件,将新文件改成原文件的名字,解密操作步骤相同。

    三、编写一个文件分割工具,能把一个大文件分割成多个小的文件,并且能再次把他们合并起来得到完整的文件。

      1、代码

    package HomeWork;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    
    public class FileDivisionAndMerge {
        
        public static void main(String[] args) {
            File file = new File("F:\eclipse-jee-2019-06-R-win32-x86_64\Workspace\class20191104\文本操作目录\Harry Potter and the Sorcerer's Stone.txt");
            fileDivsion(file);
            File file2 =new File(file.getParent()+"/分割后文件/");
            fileMerge(file2);
        }
        
        public static void fileDivsion(File file) {
            int id=1,sum=1;
            BufferedReader reader = null;
            BufferedWriter writer = null;
            try {
                reader = new BufferedReader(new FileReader(file));
                String str = null;
                //分割到目录中的该文件夹中
                writer = new BufferedWriter(new FileWriter(new File(file.getParent()+"/分割后文件/"+id+"harry.txt")));
                while((str=reader.readLine())!=null) {
                    //每三千行分割成一个文件
                    if(sum%3000!=0) {
                        writer.append(str+"
    ");
                        sum++;
                    }else if(sum%3000==0) {
                        writer.close();
                        sum=1;
                        id++;
                        writer = new BufferedWriter(new FileWriter(new File(file.getParent()+"/分割后文件/"+id+"harry.txt")));
                        writer.append(str+"
    ");
                        sum++;
                    }
                }
                //记得把缓冲区中的数组输出来,不然最后一个文件会少一部分东西!
                writer.flush();
                //关闭文件,保证稳定性
                writer.close();
                reader.close();
                System.out.println("分割完成!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public static void fileMerge(File file) {
            File[] fileList = file.listFiles();
            BufferedReader reader = null;
            BufferedWriter writer = null;
            String str = null;
            try {
                writer = new BufferedWriter(new FileWriter(file.getParent()+"/合并后的文件/harry.txt"));
                for(int i=0;i<fileList.length;i++) {
                    reader = new BufferedReader(new FileReader(fileList[i]));
                    while((str=reader.readLine())!=null) {
                        writer.append(str+"
    ");
                    }
                    reader.close();
                }
                writer.close();
                System.out.println("合并完成!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

      2、结果:

      分割后:

      合并后:

     

      3、思路

      我分割文件是每三千行分割成一个文件,大致思路就是创建一个计数器,先读文件,当读够三千行时就新建一个读入流来写新的文件,合并是将分割后目录中的文件放到一个文件数组中,外边嵌套一个for循环来执行相应文件数量次写的操作,每个操作内都用while循环读数据并写入到合并的文件中。

  • 相关阅读:
    正则表达式在行首添加指定内容
    linux之find命令详解
    一次安装rpcbind失败引发的思考
    配置linux实现路由功能
    chkconfig命令详解
    1225 数数字
    蛇形填数 ------- 模拟水题
    开灯问题---------简单模拟
    单源最短路径
    图的表示方式
  • 原文地址:https://www.cnblogs.com/wuren-best/p/11808606.html
Copyright © 2011-2022 走看看