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. ...
随机推荐
- linux中配置yum文件
yum简介:yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决. yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是 ...
- TCP/IP协议与Socket
1.计算机网络体系结构分层 OSI 参考模型注重"通信协议必要的功能是什么", TCP/IP 则更强调"在计算机上实现协议应该开发哪种程序". 2.TCP/IP ...
- MyBatis源码解析
在讲解MyBatis之前,先说下传统JDBC连接数据库的弊端: 1.JDBC底层没有实现连接池,从而导致操作数据库需要频繁的创建和释放,影响性能: 2.JDBC的代码散落在Java代码中,如果需要修改 ...
- 第05组 Alpha冲刺 (4/6)(组长)
.th1 { font-family: 黑体; font-size: 25px; color: rgba(0, 0, 255, 1) } #ka { margin-top: 50px } .aaa11 ...
- Android自定控件基础(一)——几何图形绘制
虽然本人有几年开发经验,但是自定义控件这一块儿,研究的很少,惭愧--用到的时候就是百度查找,复制粘贴.工时紧,总是想的快点完工就好.(都是借口啦,想学总会有时间哒) 作为一个Android开发 要说自 ...
- 如何开发一个maven插件
maven是当下最流行的项目管理工具,其丰富的插件为我们的工作带来了很大的便利. 但是在一些情况下,开源的插件并不能完全满足我们的需求,我们需要自己创建插件,本文就从0开始带大家一起创建自己的插件. ...
- 处理Ceph osd的journal的uuid问题
前言 之前有一篇文章介绍的是,在centos7的jewel下面如果自己做的分区如何处理自动挂载的问题,当时的环境对journal的地方采取的是文件的形式处理的,这样就没有了重启后journal的磁盘偏 ...
- modprobe: FATAL: Module ceph not found解决办法
问题 有可能你在进行 Ceph 文件系统挂载的时候出现下面的提示: modprobe: FATAL: Module ceph not found. mount.ceph: modprobe faile ...
- Java(三)常用类
@ 目录 Java常用类 一.字符串相关的类 1.String类 2.StringBuffer类 3.StringBuilder类 二.JDK8以前的日期时间API 1.java.lang.Syste ...
- centos搭建dns服务
原文:(https://www.myjinji.top/articles/2020/04/02/1585800289945.html)[https://www.myjinji.top/articles ...