2012-09-20 56 views
0

我需要从给定目录中获取java文件及其父目录的路径,但不包括它。从java中的目录和子目录列出文件,其中只包括部分文件路径

因此,例如,如果我的方法的路径为:/home/user/test作为路径,它将返回该目录下的所有文件的路径。

所以,如果/home/user/test有子文件夹:/subdir1/subdir2每片含file1.txtfile2.txt那么该方法的结果将是包含/subdir1/file1.txt/subdir2/file2.txt

而且2串如果subdir1有一个目录里面名为subsubdir和内那file3.txt,那么为该文件创建的字符串将是/subdir1/subsubdir/file3.txt,并且如果有更多的子目录将继续。

这个想法是我只想在文件上方的目录路径,但不是绝对路径,所以只有初始给定路径后的目录。

我知道它有点混乱,但我确定有人可以理解它。现在我只有一个递归函数,可以输出文件名及其绝对路径。

对此有何帮助?

+0

你是什么意思*部分文件路径*?在你的文章中,它是根相对的'/ home/user/test' – adatapost

+0

如果你有绝对路径,简单地砍掉它们的初始部分等于你的目录,例如。 '/ home/user/test/quick/brown/fox.txt'在关闭最初的'/ home/user/test /'部分后变成'quick/brown/fox.txt'。 – dasblinkenlight

回答

2

什么本来不错,如果你曾经尝试的东西,被问及的问题...

然而...

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; 
    } 
} 

你可以简单地做一个普通文件夹递归,返回文件列表和前缀的THEN条,但是这取决于你

0

如果您有输入“/ home/user/text”,文件的所有绝对路径将以/ home/user/text /开头。如果您已经能够在text /下打印所有文件的列表,那么您只需要使用合适的子字符串。

以下函数应该访问pathToDir下的所有文件。在printFileName功能,可以删除/家庭/用户/文本部分和打印文件名

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); 
    } 
} 
+0

好的,有没有简单的方法来分开它们而不必指定字符串的数量?因为子字符串函数接受一个int,但获得一个字符串的长度返回一个长和投射它会导致问题。 –

+0

你是什么意思的一个字符串的“计数”? 字符串的长度几乎不会超出int的范围。你可以放心地使用(int)longLength。 – Osiris

0

对于每个文件找到,印花T他file.getAbsolutePath().substring(rootPath.length());

1

怎么样使用你目前拥有的绝对路径,但在移除使用String.replace

从它的前缀,你说你有完整的,绝对路径,比如说在
然后就去做

String relative = full.replace(prefix, ""); 
相关问题