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+"\r\n"); } }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+"\r\n"); } } 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+"\r\n"); 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+"\r\n"); 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+"\r\n"); } reader.close(); } writer.close(); System.out.println("合并完成!"); } catch (Exception e) { e.printStackTrace(); } } }
2、结果:
分割后:
合并后:
3、思路
我分割文件是每三千行分割成一个文件,大致思路就是创建一个计数器,先读文件,当读够三千行时就新建一个读入流来写新的文件,合并是将分割后目录中的文件放到一个文件数组中,外边嵌套一个for循环来执行相应文件数量次写的操作,每个操作内都用while循环读数据并写入到合并的文件中。