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循环读数据并写入到合并的文件中。
java课后作业2019.11.04的更多相关文章
- java课后作业
课后作业之字串加密: 设计思想: 1.输入要加密的英文子串str 2.定义num=str的字符串长度 3.将字符串转化为单个字符 4.每个字符+3,向后移3个 5.定义str1,将新得到的每个字符加到 ...
- java课后作业总结
今天的课后作业是做一个查找一段文章中单词出现的概率,统计并 输出出现概率最高的几个单词.拿到题目,老师还是往常一样提醒着我们先分析题目,构建大概的编程思路.程序需要遇到文本文件的输入输出操作,这一直一 ...
- java课后作业-5
作业一:请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?“ 程序源代码; public class Lei { /** * @param args */ public static vo ...
- java课后作业-4
一.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private ...
- Java课后作业04
一.古罗马皇帝凯撒在打仗时曾经加密军事情报: 1.设计思想: 加密原理是abc等全部后移3位xyz分别等于abc,根据ascii码表的转化,将其利用charat()取单个字符进行转化,再利用Strin ...
- java 课后作业
杨辉三角 组合数 public class YH { public static void main(String agrs[]) { int a[5][5],i,j; for(i = 0;i < ...
- java课后作业7
9.页实验 下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 答: d=m;和d=c;引起编译错误: 原因: ...
- java课后作业6
一.运行TestInherits.java 结论:通过super调用基类构造方法,必须是子类构造方法中的第一个语句. 二.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不 ...
- java课后作业5
[问题]随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路: 1.申请一个长度为10的数组 2.计算机随机生成10个数,并赋给数组 3. ...
随机推荐
- 消息队列--ActiveMQ单机部署
一.环境需求 1,Centos7环境 2,jdk 1.8+ 3,主机名的命名方式中不能含有'_'字符 二.软件包下载 1,下载路径 wget http://mirror.bit.edu.cn/apac ...
- jquery自定义弹层显示大图(兼容多层iframe)
1.介绍 a:可用于多层iframe中,显示在最外层 b:动画效果为从点击的图片位置开始放大至全屏显示 2.效果图 3.js代码 1 function ShowMaxImg(src, y, x, w, ...
- Android studio设置参数文档提示
方法/步骤 进行点击Android studio菜单中的file的选项菜单. 弹出了下拉菜单中进行选择为"settings"的选项的菜单即可. 进入到了settin ...
- Java的强引用、软引用、弱引用、虚引用
背景 工程中用到guava的本地缓存.它底层实现和API接口上使用了强引用.软引用.弱引用.所以温故知新下,也夯实下基础. 预备知识 先来看下GC日志每个字段的含义 Young GC示例解释 [GC ...
- ssh2中的添,删,查,改。
1.spring封装的HibernateTemplate类的一些操作方法. 2.session提供的根据主键ID进行添.删.查.改的基本方法. 由session得到的hql语句 由session得到的 ...
- asp.net core 使用 TestServer 来做集成测试
asp.net core 使用 TestServer 来做集成测试 Intro 之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 WebServer,之前也有看到过微软文档上 TestSe ...
- Avoided redundant navigation to current location: "/users"
问题产生的原因:在Vue导航菜单中,重复点击一个菜单,即重复触发一个相同的路由,会报错,但不影响功能 解决:在router的配置文件中加入如下代码: const originalPush = Rout ...
- idea中运行tomcat不能访问8080主页问题
问题 初次使用IntelliJ IDEA,但今天在运行项目启动Tomcat后,发现无法访问Tomcat首页,出现404错误:输入http://localhost:8080时无法访问Tomcat首页,但 ...
- 了解 MySQL的数据行、行溢出机制吗?
目录 一.行 有哪些格式? 二.紧凑的行格式长啥样? 三.MySQL单行能存多大体量的数据? 四.Compact格式是如何做到紧凑的? 五.什么是行溢出? 六.行 如何溢出? 七.思考一个问题 关注送 ...
- 用MindManager做完思维导图后怎么加密
使用MindManager我们可以制作出很多简洁明了的思维导图,然而,不论是分享还是查看这些导图,我们往往需要对导图进行加密操作,尤其是制定公司或企业的下一步发展计划时,加密导图就显得很有必要了. M ...