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循环读数据并写入到合并的文件中。

原文地址:https://www.cnblogs.com/wuren-best/p/11808606.html