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. ...
随机推荐
- 初次使用flask
以写的一个小的例子来记录第一次使用: from flask import Flask, render_template import json # 实例化,可视为固定格式 app = Flask(__ ...
- Android基础——项目的文件结构(三)
Android基础--项目的文件结构(三) 代码源文件夹与资源文件夹 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目中,代码源文件夹有4个 ...
- CSS3之animation属性
CSS中的animation属性可用于为许多其他CSS属性设置动画,例如颜色,背景色,高度或宽度. 每个动画都需要使用@keyframes这种at-rule语句定义,然后使用animation属性来调 ...
- [MIT6.006] 5. Binary Search Trees, BST Sort 二分搜索树,BST排序
第5节课主要讲述了二分搜索树概念和BST排序.讲师提出一个关于"跑道预订系统"的问题,假设飞机场只有一个跑道,飞机需要为未来降落时间t进行预订,如果时间集合R中,在t时间前后k分钟 ...
- Git仓库的提交记录乱成一团,怎么办?
大家好,今天和大家聊聊git当中一个非常好用的功能--区间选择,它可以帮我们处理看起来非常复杂的提交记录.从而帮助我们很快找到我们需要的内容. 如果大家有参与过多人协同的项目开发,比如十几个人甚至更多 ...
- 这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的
前言 如果你想深入研究Java并发的话,那么AQS一定是绕不开的一块知识点,Java并发包很多的同步工具类底层都是基于AQS来实现的,比如我们工作中经常用的Lock工具ReentrantLock.栅栏 ...
- SQL 查找"存在",别再用 count 了,很耗费时间的!
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢? 无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的 ...
- Integer 错误的加锁
多线程同时访问一个Integer加锁的问题,程序运行和想要的结果相差甚远,让我百思不得其解,就下来研究了一下: 在进行多线程同步时,加锁是保证线程安全的重要手段之一.synchronized是大多数程 ...
- Flink处理函数实战之五:CoProcessFunction(双流处理)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 面试阿里,首先要掌握的 Java 泛型,帮你一次性搞懂!
引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首 ...