日期:2018.11.18
博客期:025
星期日
Part 1:使用 Files.walkFileTree()来找出指定文件夹下大小大于1KB的文件
package temp; import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.LinkedList;
import java.util.List; public class FindFile2 {
public void test1() throws IOException{
Path path = Paths.get("D:\\test\\hold1");
//Path path = fileSystem.getPath("c:/windows");
List<String> result = new LinkedList<String>();
Files.walkFileTree(path,new FilterFilesVisitor4(result));
System.out.println("result.size()=" + result.size());
for (String name : result) {
System.out.println(name);
}
}
public void test2() throws IOException{
Path path = Paths.get("D:\\test\\hold1");
//Path path = fileSystem.getPath("c:/windows");
List<String> result = new LinkedList<String>();
Files.walkFileTree(path,new FilterFilesVisitor(result));
System.out.println("result.size()=" + result.size());
for (String name : result) {
System.out.println(name);
}
}
public void test3() throws IOException{
Path path = Paths.get("D:\\test\\hold1");
List<String> result = new LinkedList<String>();
Files.walkFileTree(path,new FilterFilesVisitor2(result));
System.out.println("result.size()=" + result.size());
for (String name : result) {
System.out.println(name);
}
}
public void test4() throws IOException{
Path path = Paths.get("D:\\test\\hold1");
List<String> result = new LinkedList<String>();
Files.walkFileTree(path,new FilterFilesVisitor3(result));
System.out.println("result.size()=" + result.size());
for (String name : result) {
System.out.println(name);
}
}
public static void main(String[] args) throws IOException {
FindFile2 t = new FindFile2();
t.test1();
//t.test2();
//t.test3();
//t.test4();
} }
class FilterFilesVisitor extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor(List<String> result) {
this.result = result;
} public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(".txt")) {
result.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
}
class FilterFilesVisitor2 extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor2(List<String> result) {
this.result = result;
} public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(".java")) {
result.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
}
class FilterFilesVisitor3 extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor3(List<String> result) {
this.result = result;
} public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(".txt")&&(file.toString().contains("no")||file.toString().contains("on"))) {
result.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
}
class FilterFilesVisitor4 extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor4(List<String> result) {
this.result = result;
} public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toFile().length()>1024) {
result.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
}
FilterFilesVisitor4.java
运行截图:
解说:这个是总体的代码,test1对应Part1,test2、3对应Part2和test4对应Part3,而我们的区别就在于判定条件上,File类的length()方法,求得文件的大小,求出的值为long类型,实际上就是文件有多少B(字节)。
Part 2:使用 Files.walkFileTree()来找出指定文件夹下以.txt和.java为后缀的文件
package temp; import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.LinkedList;
import java.util.List; public class FindFile2 {
public void test2() throws IOException{
Path path = Paths.get("D:\\test\\hold1");
//Path path = fileSystem.getPath("c:/windows");
List<String> result = new LinkedList<String>();
Files.walkFileTree(path,new FilterFilesVisitor(result));
System.out.println("result.size()=" + result.size());
for (String name : result) {
System.out.println(name);
}
}
public void test3() throws IOException{
Path path = Paths.get("D:\\test\\hold1");
List<String> result = new LinkedList<String>();
Files.walkFileTree(path,new FilterFilesVisitor2(result));
System.out.println("result.size()=" + result.size());
for (String name : result) {
System.out.println(name);
}
}
public static void main(String[] args) throws IOException {
FindFile2 t = new FindFile2();
t.test2();
t.test3();
} }
class FilterFilesVisitor extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor(List<String> result) {
this.result = result;
} public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(".txt")) {
result.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
}
class FilterFilesVisitor2 extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor2(List<String> result) {
this.result = result;
} public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(".java")) {
result.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
}
FindFile2.java
运行截图:
解说:实际上这个就是继承一下 模板类 SimpleFileVisitor<Path> 的基础属性,然后自己定义我们自己的应用方法。不会的园友要实现文件的查找,只需按照以上模板修改file.toString().endsWith(".txt")里的语句即可,如上代码也可以直接写file.toString().endsWith(".txt")||file.toString().endsWith(".java"),嗯?是不是很好理解?
Part 3: Files.walkFileTree()来找出指定文件夹下含有特殊字符串的.txt文件
class FilterFilesVisitor3 extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor3(List<String> result) {
this.result = result;
} public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(".txt")&&(file.toString().contains("no")||file.toString().contains("on"))) {
result.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
}
FilterFilesVisitor3.java
运行截图:
解说:这个实际上,就是更改判定的问题,配合上边代码实现任务!
Part 4:看懂如下代码
package file; import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.HashMap;
import java.util.Map; public class FileWatcherDemo { /**
* @param args
*/
public static void main(String[] args) {
//创建一个WatchService对象,此对象将用于管理特定文件夹的变动信息队列。
try{WatchService service=FileSystems.getDefault().newWatchService();
//此集合可保存多个文件夹的监控信息,当前只使用了一个
Map<WatchKey, Path> keyMap= new HashMap<WatchKey, Path>();
Path path=Paths.get("D:\\test");
//设置WatchService对象管理的内部队列,将保存指定的文件夹的创建、删除和修改事件信息
//返回的WatchKey对象可用于从事件队列中获取事件对象
WatchKey key=path.register(service, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY);
keyMap.put(key, path); do {
//开始监控,阻塞等待,当感兴趣的事件发生时,take()方法返回。
key=service.take();
Path eventDir=keyMap.get(key);
//从事件队列中提取所有的事件
for (WatchEvent<?> event : key.pollEvents()) {
//是什么类型的事件?
WatchEvent.Kind<?> kind=event.kind();
//是哪个对象发生了变动?
Path eventPath=(Path)event.context();
System.out.println(eventDir+":"+kind+":"+eventPath);
}
} while (key.reset()); //reset方法重置此对象,让其可以重新接收信息 } catch (Exception e) { } } }
FileWatcherDemo
运行结果:
解说:嗯,我是进行了对hold1文件夹里的文件进行改名,改了两次;之后是将本目录下的文件line2.bmp复制并粘贴到当前文件目录中,之后删掉原来的line2.bmp,之后改名line2 - 副本.bmp为line2.bmp文件,截图如上,就是针对此操作进行的监听,WatchKey对象可用于从事件队列中获取事件对象,其中path.register()方法是返回WatchKey对象的工具,需要Path给好路径。StandardWatchEventKinds就正如它的翻译一样,它是标准的监听事件种,其内部含有我们静态的事件成员,比如ENTRY_CREATE(创建)和ENTRY_DELETE(删除)等。WatchService service=FileSystems.getDefault().newWatchService();一句是
WatchService功能的伪构造方法,就是新建一个监听对象的方法...
简易UML类图:
Part 5:写一个小实例——文件分割工具、文件组合工具(目前领域只限txt文件)
package com.zhang.pvp; import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner; public class TestZip {
public void FileFrozen(File x) throws FileNotFoundException{
File f1,f2,f3;
f1 = new File("file/part1.txt");
f2 = new File("file/part2.txt");
f3 = new File("file/part3.txt");
Scanner sc = new Scanner(x);
PrintWriter pw1 = new PrintWriter(f1);
PrintWriter pw2 = new PrintWriter(f2);
PrintWriter pw3 = new PrintWriter(f3);
pw1.println(sc.nextLine());
pw2.println(sc.nextLine());
while(sc.hasNextLine())
{
pw3.println(sc.nextLine());
}
pw1.close();
pw2.close();
pw3.close();
sc.close();
}
public void FileGroup(File []x,int num) throws FileNotFoundException{
File file = new File("file/AddTo.txt");
PrintWriter pw = new PrintWriter(file);
for(int i=0;i<num;++i)
{
Scanner sc = new Scanner(x[i]);
while(sc.hasNextLine())
{
pw.println(sc.nextLine());
}
sc.close();
}
pw.close();
}
public static void main(String[] args) throws FileNotFoundException {
File f = new File("file/basic.txt");
File []fs = new File[3];
for(int i=0;i<3;++i)
fs[i] = new File("file/part"+(i+1)+".txt");
TestZip tz = new TestZip();
tz.FileFrozen(f);
tz.FileGroup(fs,3);
}
}
TestZip.java
Part 6:计算文件夹的总大小的工具+实现文件加密功能
package tempzerb; import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Scanner; class FilterFilesVisitor extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); private long Length = 0; public long getLength() {
return Length;
}
public void setLength(long length) {
Length = length;
}
public FilterFilesVisitor(List<String> result) {
this.result = result;
Length = 0;
}
//查询以 ends 为结尾的文件
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
Length = Length + file.toFile().length();
return FileVisitResult.CONTINUE;
}
//查询以 ends 为结尾的文件
public FileVisitResult visitFileEndWith(Path file, BasicFileAttributes attrs,String ends) {
if (file.toString().endsWith(ends)) {
result.add(file.toString());
}
Length = Length + file.toFile().length();
return FileVisitResult.CONTINUE;
}
//查询包含 card 字符串的文件
public FileVisitResult visitFileContains(Path file, BasicFileAttributes attrs,String card) {
if (file.toString().contains(card)) {
result.add(file.toString());
}
Length = Length + file.toFile().length();
return FileVisitResult.CONTINUE;
}
//查询大小处于m和n之间的文件
public FileVisitResult visitFileContains(Path file, BasicFileAttributes attrs,long m,long n) {
if (file.toFile().length()>=m&&file.toFile().length()<=n) {
result.add(file.toString());
}
Length = Length + file.toFile().length();
return FileVisitResult.CONTINUE;
}
} public class QTest {
public void test1(Path path) throws IOException{
List<String> result = new LinkedList<String>();
FilterFilesVisitor ffv = new FilterFilesVisitor(result);
Files.walkFileTree(path,ffv);
System.out.println("总大小为: " + ffv.getLength());
}
public void test2(File x) throws IOException{
//加密文件
File enFile = new File("file/enfile.txt");
//解密文件
File untiFile = new File("file/untifile.txt");
if(enFile.exists())
enFile.delete();
if(untiFile.exists())
untiFile.delete();
enFile.createNewFile();
untiFile.createNewFile();
Scanner sc = new Scanner(x);
PrintWriter pw = new PrintWriter(enFile);
PrintWriter pws = new PrintWriter(untiFile);
Random random = new Random(System.currentTimeMillis());
int c = random.nextInt(10);
pws.append((char)c);
while(sc.hasNext())
{
String str = sc.next();
char []cha = str.toCharArray();
for(int i=0;i<cha.length;++i)
pw.append((char)(cha[i]-c));
pw.append(' ');
}
pws.close();
sc.close();
pw.close();
}
public void test3(Path path){ }
public static void main(String[] args) throws IOException {
QTest q = new QTest();
Path path = Paths.get("file");
q.test1(path);
q.test2(new File("file/Mort.jsp"));
q.test3(path);
}
}
QTest.java
运行截图:
说明:我的文件加密就是文件的字符都减去同一个随机值...并把这个随机值读到某一个文件当中去,这个文件就是解码文件,而减去随机值的字符们进而构成了我们无法直接识别、读取的伪乱码,这就是加密文件了,这个加密文件的保存内容,你真的看不懂,难道你看的出来上边的图片内容实际上是"Hello World"吗?只有通过调用解码文件的特殊字符,进而完成对加密文件的解码,才能得到真正“可读”的文件!而读取文件总大小的话,就设一个值,遍历文件就好了,没遍历一个文件,就加上它的长度!最终得到的大小就是文件夹里的所有文件的大小。至于文件的分割其实就是将文件读取到的数据,写入不同的两个文件里边去。
Java的动手动脑(七)的更多相关文章
-
Java之动手动脑(三)
日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...
-
java的动手动脑10月20日
(1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...
-
Java的动手动脑
动手动脑及课后实 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ...
-
java异常处理动手动脑问题解决和课后总结
动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...
-
java课java方法动手动脑
动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) { ...
-
java课堂动手动脑及课后实验总结
动手动脑一:枚举 输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...
-
java课堂动手动脑博客
随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 要求将设计思路.程序流程图.源程序代码.结果截图.编程总结等发表到博客园. (截止时间2015 ...
-
Java一些动手动脑实验
一.Java字段初始化的规律: 输出结果为:100 和 300 当把{filed=200}放在public int field=100之后输出结果为:200 和 300 所以执行类成员定义时指定的默认 ...
-
Java的动手动脑(六)
日期:2018.11.8 星期四 博客期:022 --------------------------------------------------------------------------- ...
随机推荐
-
一个简单oop的changeTab
好多地方都会用到这样一个效果“点击tab切换内容页”,根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对象编程看起来比较爽,并且更容易维护,于是就用oop的思想 ...
-
UML 类图常用表示方法.
UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’): 依赖:虚线+箭头(动物和空气的关系): 关联:实线+箭头(企鹅需要知道气候才迁移): 聚合:空心四边形+实线+箭头(雁群和大雁的关系 ...
-
STM32堆栈溢出
在使用STM32读取SD Card的文件时,总是会卡死在读函数那里 res = f_read(&fsrc, gbuffer, sizeof(gbuffer)-1, &br); 而且出现 ...
-
八大常见内排序java实现
虽然排序算法烂大街了,但是哥依然用java实现了一遍,只为自己练练手,后面可以时不时的回头看看...仅此而已,各位可以提意见,莫喷!! 一.冒泡排序 基本思想:在要排序的一组数中,对当前还未排好序的范 ...
- audition输出参数设置
-
尾数为0零BigDecimal不能装成正常数
BigDecimal b1 = rs.getBigDecimal("binary_double_column"); System.out.println( "ceshi: ...
-
安装Visual Studio 2010之后怎样安装MSDN Library
这篇博客参考自:http://justargon.blog.163.com/blog/static/21394413020134100737688/ MSDN2010安装及使用(MSDN Librar ...
-
如何应对“改变现状”的失败";
参加工作后,利用闲暇时间看了一些书,发现以上的场景可以通过心理学,神经生物学等相关的知识来解析,同时也可以利用这些知识来进行一些改进.那么下文就来尝试通过心理学来解析这个场景,同时提出一些改进方法. ...
-
12.14 Daily Scrum
Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. 邓亚梅 美化搜索框UI. 美 ...
-
[golang 易犯错误] golang 局部变量初始化:=的陷阱
我们知道,golang中局部变量初始化方法(使用“:=”创建并赋值),让我们在使用变量时很方便.但是,这也是易犯错误的地方之一.特别是这个初始化符还支持多个变量同时初始化,更特别的是它还支持原有变量赋 ...