前不久给一搞前端开发的同事写的一个程序,功能挺简单:将指定目录中的所有文件和目录的相对路径输入到指定的文本文件,具体代码如下:
/**
* 参数0:要扫描的目录,参数1:输出到的文件
* @param args
*/
public static void main(String[] args) {
BufferedWriter bw = null;
FileWriter fw = null;
BufferedReader br = null;
String src = null;
String dst = null;
File file = null;
File txtFile = null;
try{
if(args!=null&&args.length>1){
src = args[0];
dst = args[1];
file = new File(src);
if(file==null||!file.exists()||!file.isDirectory()){
System.out.println("错误的目录路径:"+src);
System.exit(0);
}
txtFile = new File(dst);
}else{
System.out.print("请输入目录路径,输入quit退出");
System.out.print("\n请输入>");
br = new BufferedReader(new InputStreamReader(System.in));
while((src = br.readLine()) != null) {
if(src.equals("quit")) {
System.out.print("\n程序退出...");
System.exit(0);
}
file = new File(src);
if(file==null||!file.exists()||!file.isDirectory()){
System.out.println("错误的目录路径:"+src);
}else{
break;
}
}
System.out.print("\n请输入输出文件路径,输入quit退出");
System.out.print("\n请输入>");
while((dst = br.readLine()) != null) {
if(dst.equals("quit")) {
System.out.print("\n程序退出...");
System.exit(0);
}
txtFile = new File(dst);
break;
}
}
FileBrowers test = new FileBrowers();
int len = src.length();
System.out.println("开始扫描目录: "+src);
List<String> filePaths = test.getFilePaths(file);
if(!txtFile.exists()){
txtFile.createNewFile();
}
fw = new FileWriter(txtFile, false);
bw = new BufferedWriter(fw);
int flen = filePaths.size();
int subindex = len+1;
for (int i=0;i<flen;i++) {
String path = filePaths.get(i).substring(subindex);
fw.append(path.replaceAll("\\\\", "/"));
if(i<flen-1)
fw.append(",");
}
fw.flush();
System.out.println("扫描完成,扫描到目录和文件共" + flen + "个,并输入到文件:" + dst);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if(bw!=null)
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public List<String> getFilePaths(File baseDir){
List<String> list = new ArrayList<String>();
//保存目录堆栈
Stack<File> dirList=new Stack<File>();
dirList.push(baseDir);
//还存在目录,则一继续查找
while(!dirList.isEmpty())
{
//取出栈顶元素的目录
File file=dirList.pop();
//取出该目录所有的文件及目录
File[] subfiles=file.listFiles();
for(int i=0;subfiles!=null&&i<subfiles.length;i++)
{
//如果是目录,将目录放入堆栈中
if(!subfiles[i].isFile())
{
dirList.push(subfiles[i]);
list.add(subfiles[i].getPath()+"/");
}else{
list.add(subfiles[i].getPath());
}
}
}
return list;
}
然后打包成.jar文件(FileBrowers.jar),并新建一个.bat文件,内容如下(传入要搜索的目录和输出的文件):
java -jar FileBrowers.jar D:\my d:\my\a.txt
pause
将该.jar文件和.bat文件放在同一个目录,双击.bat文件运行即可执行了。