我需要从给定目录中获取java中文件及其父目录的路径,但不包括它。
例如,如果我的方法被赋予路径:/home/user/test
作为路径,它将返回该目录中及其下的所有文件的路径。
因此,如果/home/user/test
包含子文件夹:/subdir1
和/subdir2
,每个子文件夹包含file1.txt
和file2.txt
,则该方法的结果将包含2个字符串/subdir1/file1.txt
和/subdir2/file2.txt
如果subdir1
里面有一个名为subsubdir
的目录,并且在file3.txt
内,那么为该文件创建的字符串将是/subdir1/subsubdir/file3.txt
,如果还有更多将继续的子目录。
我的想法是,我只想要文件上方的目录路径,而不是绝对路径,因此只有初始给定路径后的目录。
我知道它有点令人困惑,但我确信有人可以理解它。现在我所拥有的是一个递归函数,它打印出文件名及其绝对路径。
对此有何帮助?
答案 0 :(得分:3)
如果你尝试了一些事情并询问了有关这个问题的话会有什么好处......
...然而
public class TestFileSearch {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new TestFileSearch();
}
public TestFileSearch() {
File parentPath = new File("C:/Users/shane/Documents");
List<String> files = list(parentPath);
for (String file : files) {
System.out.println(file);
}
}
protected List<String> list(File parent) {
return listFiles(parent, parent);
}
protected List<String> listFiles(File parent, File folder) {
List<String> lstFiles = new ArrayList<String>(25);
if (folder.isDirectory()) {
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
lstFiles.addAll(listFiles(parent, file));
} else {
String path = file.getPath();
String offset = parent.getPath();
path = path.substring(offset.length());
lstFiles.add(path);
}
}
}
}
return lstFiles;
}
}
你可以简单地做一个正常的文件夹递归,返回一个文件列表和那个前缀的条带,但这取决于你
答案 1 :(得分:1)
如何使用您当前拥有的绝对路径,但使用String.replace
从中删除前缀你说你有完整的绝对路径,比如 full 然后就这样做
String relative = full.replace(prefix, "");
答案 2 :(得分:0)
如果您输入“/ home / user / text”,则文件的所有绝对路径都将以/ home / user / text /开头。如果您已经能够在text /下打印所有文件的列表,那么您需要做的就是选择合适的子字符串。
以下函数应访问pathToDir下的所有文件。在printFileName函数中,您可以删除/ home / user / text部分并打印文件名
public static void gotoAllFiles(File pathToDir) {
if (pathToDir.isDirectory()) {
String[] subdirs = pathToDir.list();
for (int i=0; i<subdirs.length; i++) {
gotoAllFiles(new File(pathToDir, subdirs[i]));
}
} else {
printFileName(pathToDir);
}
}
答案 3 :(得分:0)
对于找到的每个文件,请打印file.getAbsolutePath().substring(rootPath.length());