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. ...
随机推荐
- 【Java】线程的 6 种状态
一.线程状态的枚举 Java的线程从创建到销毁总共有6种状态.这些状态被定义在Thread类种的内部枚举 State 中,分别如下: 1.NEW:初始状态. 线程实例已创建,但未启动. // 实例创建 ...
- 运维告警排班太复杂?试试Cloud Alert智能告警排班
前言: 之前的几篇文章有说过,通过智能告警平台Cloud Alert,将指定条件的告警以多样化的通知方式,通知到指定的人,其中的通知的方式包含电话.短信.邮件.微信.APP.钉钉等. 本篇文章就来说下 ...
- MySQL死锁问题(转)
线上某服务时不时报出如下异常(大约一天二十多次):"Deadlock found when trying to get lock;". Oh, My God! 是死锁问题.尽管报错 ...
- maven 笔记2
maven 中央工厂的位置:D:\dubbo\apache-maven-3.2.5\lib D:\dubbo\apache-maven-3.2.5\lib pom-4.0.0.xml reposito ...
- 基于tcp的socket通信
# socket # socekt是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,socket其实就是一个门面模式,它 # 把复杂的tcp/ip协议族隐藏在socket接 ...
- Springboot 完整搭建快速入门,必看!
前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发. Spr ...
- Android10_原理机制系列_AMS之AMS的启动
概述 该篇基于AndroidQ,主要介绍系统启动中的 AMS(ActivityManagerService)的启动过程. AMS对四大组件(AndroidQ将activity移到了ActivityTa ...
- sql字段长度等于
select count(*) from boc_loan_apply where length(birthday)=7;
- OAuth 2.0授权框架详解
目录 简介 OAuth的构成 refresh Token Authorization Code模式 隐式授权 Resource Owner 授权密码认证 Client 认证授权 github的OAut ...
- 考研党其实可以用思维导图MindManager做考研复习计划
近年由于就业压力,个人学历提升等各种原因,考研的人数越来越多了,相对难度也越来越大了,尽管今年研究生招生规模同比去年增加18.9万,但也无法掩盖考研的竞争逐年激烈. 身为考研大军中的预备选手之一,小编 ...