我需要编写一个递归算法来显示计算机文件系统中目录的内容,但我对Java很新。有没有人有关于如何使用Java访问文件系统中的目录的任何代码或良好的教程?
答案 0 :(得分:1)
您可以使用JFileChooser课程,请查看example。
您也可以使用java执行本地命令,例如DIR
,ls
,这里是example
答案 1 :(得分:1)
这花了我太长时间来编写和测试,但这里应该有用。
注意:您可以传入字符串或文件。
注2:这是一个天真的实现。它不仅是单线程的,而且它不会检查文件是否是链接,并且由于这个原因而可能陷入无限循环。
注3:评论后的行可以用你自己的实现替换。
import java.io.*;
public class DirectoryRecurser {
public static void parseFile(String filePath) throws FileNotFoundException {
File file = new File(filePath);
if (file.exists()) {
parseFile(file);
} else {
throw new FileNotFoundException(file.getPath());
}
}
public static void parseFile(File file) throws FileNotFoundException {
if (file.isDirectory()) {
for(File child : file.listFiles()) {
parseFile(child);
}
} else if (file.exists()) {
// Process file here
System.out.println(file.getPath());
} else {
throw new FileNotFoundException(file.getPath());
}
}
}
然后可以这样调用(使用Windows路径,因为此Workstation使用的是Windows):
public static void main(String[] args) {
try {
DirectoryRecurser.parseFile("D:\\raisin");
} catch (FileNotFoundException e) {
// Error handling here
System.out.println("File not found: " + e.getMessage());
}
}
就我而言,打印出来:
找不到档案:D:\ raisin
因为所说的目录只是我编写的目录。否则,它会打印出每个文件的路径。
答案 2 :(得分:1)
查看Apache Commons VFS:http://commons.apache.org/vfs/
样品:
// Locate the Jar file
FileSystemManager fsManager = VFS.getManager();
FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );
// List the children of the Jar file
FileObject[] children = jarFile.getChildren();
System.out.println( "Children of " + jarFile.getName().getURI() );
for ( int i = 0; i < children.length; i++ )
{
System.out.println( children[ i ].getName().getBaseName() );
}
如果您需要访问网络驱动器上的文件,请查看JCIFS:http://jcifs.samba.org/
答案 3 :(得分:0)
对于每个文件,您需要检查它是否是目录。如果是,你需要递归。这是一些未经测试的代码,应该有所帮助:
public void listFiles(File f){
System.out.println(f.getAbsolutePath());
if(f.isDirectory()){
for (File i : f.listFiles()){
listFiles(i);
}
}
}
答案 4 :(得分:0)
检查这个好友
http://java2s.com/Code/Java/File-Input-Output/Traversingallfilesanddirectoriesunderdir.htm
public class Main {
public static void main(String[] argv) throws Exception {
}
public static void visitAllDirsAndFiles(File dir) {
System.out.println(dir);
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
visitAllDirsAndFiles(new File(dir, children[i]));
}
}
}
}