今天老板突然吩咐一个任务给我,把公共盘的资料整理一遍,我问要怎么整,他说把大于1g的文件都找出来,,,,,我这时有千万个草泥马在心中奔驰而过,但没办法,总不能拒绝老板的要求啊。
一想到我最近不是在学java吗,于是就写了下面的一个小程序(勉强能看),轻松解决了老板这个特殊“任务”!
PS:楼主目前还是一位机械狗,正在学习java准备转行!
package ioStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
public class FileChaxun {
public static void main(String[] args) throws Exception {
findFiles("X:\\10 Department Management 部门管理\\ENG 工程部");
findMaxFiles("X:\\10 Department Management 部门管理\\ENG 工程部");
}
//查找文件,并把文件路径、文件名称、文件大小写进files.txt中
public static void findFiles(String filePath) throws Exception {
File div=new File(filePath);
ArrayList<File> fileList = new ArrayList<File>();
fileToList(div,fileList);
File fileName=new File(div,"files.doc");
fileToWrite(fileList,fileName);
}
//查找大于1024MB的文件,并把文件路径、文件名称、文件大小写进maxFiles.txt中
public static void findMaxFiles(String filePath) throws Exception {
File div=new File(filePath);
ArrayList<File> maxFileList = new ArrayList<File>();
fileToList(div,maxFileList);
File maxfliesName=new File(div,"maxFiles.doc");
maxFileToWrite(maxFileList,maxfliesName);
}
//递归,把文件对象写进一个集合中
private static void fileToList(File div, ArrayList<File> fileList) {
File[] filesArr=div.listFiles();
for(File f:filesArr){
if(f.isDirectory()){
fileToList(f,fileList);
}
fileList.add(f);
}
}
//把文件路径、文件名称、文件大小写进files.txt中
private static void fileToWrite(ArrayList<File> fileList, File fileName) throws Exception {
BufferedWriter bufferedWriter=
new BufferedWriter(new FileWriter(fileName));
for(File f:fileList){
long fileLenth=f.length()/1024/1024;
if(fileLenth!=0){
bufferedWriter.write("-------------------------------------------------------------");
bufferedWriter.newLine();
bufferedWriter.write("文件路径:"+f.getParent()+" "+"文件名称:"+
f.getName()+"---文件大小:"+fileLenth+"MB");
bufferedWriter.newLine();
bufferedWriter.flush();
}
}
bufferedWriter.close();
}
//把大于1024MB的文件路径、文件名称、文件大小写进maxFiles.txt中
private static void maxFileToWrite(ArrayList<File> maxFileList, File maxfliesName)
throws Exception{
BufferedWriter bufferedWriter=
new BufferedWriter(new FileWriter(maxfliesName));
for(File file:maxFileList){
long mb=1024;
long fileLength=file.length()/1024/1024;
if(fileLength>mb){
bufferedWriter.write("-------------------------------------------------------------");
bufferedWriter.newLine();
bufferedWriter.write("文件路径:"+file.getParent()+" "+"文件名称:"+
file.getName()+"---文件大小:"+fileLength+"MB");
bufferedWriter.newLine();
bufferedWriter.flush();
}
}
bufferedWriter.close();
}
}
在原有基础上,对代码进行了精简,并增加了多线程,搜起来爽歪歪有木有!
package io;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class FindFilesThread {
public static void main(String[] args) throws Exception {
Runnable findFiles=new FindFiles("X:\\10 Department Management 部门管理\\GM 总经办");
Runnable findFiles2=new FindFiles("X:\\10 Department Management 部门管理\\ENG 工程部");
new Thread(findFiles).start();
new Thread(findFiles2).start();
}
}
class FindFiles implements Runnable{
private String filePath=null;
public FindFiles(String filePath) {
this.filePath=filePath;
}
@Override
public void run() {
File div=new File(filePath);
ArrayList<File> fileList = new ArrayList<File>();
filesToList(div,fileList);
File fileName=new File(div,"files.doc");
File maxfliesName=new File(div,"maxFiles.doc");
try {
filesToWrite(fileList,fileName,maxfliesName);
} catch (Exception e) {
e.printStackTrace();
}
}
//递归,把文件对象写进一个集合中
private static void filesToList(File div, ArrayList<File> fileList) {
File[] filesArr=div.listFiles();
for(File f:filesArr){
if(f.isDirectory()){
filesToList(f,fileList);
}
fileList.add(f);
}
}
//遍历集合,把文件信息写进磁盘
private static void filesToWrite(ArrayList<File> fileList, File fileName,File maxfliesName)
throws Exception {
BufferedWriter filesWriter=
new BufferedWriter(new FileWriter(fileName));
BufferedWriter maxFileWriter=
new BufferedWriter(new FileWriter(maxfliesName));
for(File f:fileList){
long fileLenth=f.length()/1024/1024;
if(fileLenth>0&&fileLenth<1024)
writer(f,filesWriter,fileLenth);
if(fileLenth>1024){
writer(f,maxFileWriter,fileLenth);
}
}
filesWriter.close();
maxFileWriter.close();
}
private static void writer(File f,BufferedWriter buff,long fileLenth)
throws IOException {
buff.write("-------------------------------------------------------------");
buff.newLine();
buff.write("文件路径:"+f.getParent()+" "+"文件名称:"+
f.getName()+"---文件大小:"+fileLenth+"MB");
buff.newLine();
buff.flush();
}
}
再想了想,决定弄个内部类来玩玩,
package io;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class FindFilesIn {
public Runnable findFilesByRunnable(String filePath){
return new FindFiles(filePath);
}
private class FindFiles implements Runnable{
private String filePath=null;
public FindFiles(String filePath) {
this.filePath=filePath;
}
@Override
public void run() {
File div=new File(filePath);
ArrayList<File> fileList = new ArrayList<File>();
filesToList(div,fileList);
File fileName=new File(div,"files.doc");
File maxfliesName=new File(div,"maxFiles.doc");
try {
filesToWrite(fileList,fileName,maxfliesName);
} catch (Exception e) {
e.printStackTrace();
}
}
//递归,把文件对象写进一个集合中
private void filesToList(File div, ArrayList<File> fileList) {
File[] filesArr=div.listFiles();
for(File f:filesArr){
if(f.isDirectory()){
filesToList(f,fileList);
}
fileList.add(f);
}
}
//遍历集合,把文件信息写进磁盘
private void filesToWrite(ArrayList<File> fileList, File fileName,File maxfliesName)
throws Exception {
BufferedWriter filesWriter=
new BufferedWriter(new FileWriter(fileName));
BufferedWriter maxFileWriter=
new BufferedWriter(new FileWriter(maxfliesName));
for(File f:fileList){
long fileLenth=f.length()/1024/1024;
if(fileLenth>0&&fileLenth<1024)
writer(f,filesWriter,fileLenth);
if(fileLenth>1024){
writer(f,maxFileWriter,fileLenth);
}
}
filesWriter.close();
maxFileWriter.close();
}
private void writer(File f,BufferedWriter buff,long fileLenth)
throws IOException {
buff.write("-------------------------------------------------------------");
buff.newLine();
buff.write("文件路径:"+f.getParent()+" "+"文件名称:"+
f.getName()+"---文件大小:"+fileLenth+"MB");
buff.newLine();
buff.flush();
}
}
}
调用
package io;
public class FindFilesDemo {
public static void main(String[] args) throws Exception {
FindFilesIn findFilesIn=new FindFilesIn();
Runnable findFiles=findFilesIn.findFilesByRunnable("E:\\视频");
Runnable findFiles2=findFilesIn.findFilesByRunnable("E:\\下载");
new Thread(findFiles).start();
new Thread(findFiles2).start();
}
}