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 基础命令及基本目录
Linux 基础命令及基本目录 一.网卡 1.网卡配置文件路径 /etc/sysconfig/network-scripts/ifcfg-eth0 配置文件: TYPE=Ethernet # 以太 ...
- 搭建面向NET Framework的CI/CD持续集成环境(一)
前言 网上大多数都是针对主流的Spring Cloud.NET Core的CI/CD方案.但是目前国内绝大部分的公司因为一些历史原因无法简单的把项目从NET Framework切换升级到NET Cor ...
- git , repo out off memory
解决方法,建立swap # dd if=/dev/zero of=/root/myswapfile bs=1M count=1024 1024+0 records in 1024+0 records ...
- TTL门和MOS门悬空输入的处理
引言 本来是数字电路学习时很重要的考点,但是总容易忘掉,所以记录一下~ 内容 TTL TTL电路中的TTL是Transistor-Transistor-Logic的英文缩写,指的是晶体管逻辑电路,即T ...
- JAVA SE——集合框架
1.首先根据业务场景选择哪种集合类型. set(无序,并且不包含重复元素),list(有序,并且允许重复元素),map(key-value,)
- 利用虚拟化环境虚拟nvme盘
前情介绍 SPDK SPDK的全称为Storage Performance Development Kit ,是Intel发起的一个开源驱动项目,这个是一个开发套件,可以让应用程序在用户态去访问存储资 ...
- 彻底卸载MySQL5.7(msi,exe)版
1,停止MySQL服务 2,右键找到任务管理器 3,在程序中卸载MySQL 4,删除MySQL安装目录 有的是在C:\Program Files下,我的是在(X86)下 5,删除隐藏文件中的MySQL ...
- Dubbo 服务引入-Version2.7.5
1.服务引用原理 Dubbo 服务引用的时机有两个,第一个是在 Spring 容器调用 ReferenceBean 的 afterPropertiesSet 方法时引用服务,第二个是在 Referen ...
- 02、Spring-HelloWorld
0. 环境准备 1) jar包 jar包我会帮大家准备好的,所以不用担心找不到Jar包 链接:https://pan.baidu.com/s/1JJcYaspK07JL53vU-q-BUQ 提取码: ...
- Java 中常见的细粒度锁实现
上篇文章大致说了下 ReentrantLock 类的使用,对 ReentrantLock 类有了初步的认识之后让我们一起来看下基于 ReentrantLock 的几种细粒度锁实现. 这里我们还是接着用 ...