1

我试图了解“如何通过传递文件或文件夹的相对路径来获取文件?” . 这是示例:

代码:

  public class somex {
    public static void main {
       String fileName = System.getProperty("user.dir");   <---This gives me path for the current working directory.
       File file = new File(fileName + "../../xml_tutorial/sample.xlsx" );
       System.out.println(file.getCanonicalPath());         <---This gives me path for the file that is residing in folder called "xml_tutorial".
     }
  }

    >>>> 

在这里,我知道文件位置,所以我能够传递正确的相对路径。并且,设法打印文件路径。我已经删除了“sample.xlsx”并执行了上面的代码;没有失败,它给了我路径名,它与文件存在时的路径相同(即在删除之前)。怎么可能?我在这里期待例外。为什么它不抛出异常?

二、我想对文件名使用正则表达式,如:“../../xml_tutorial/samp.*”。但这不起作用,它给了我 IOException。为什么它无法识别文件 sample.xlsx ?(注意:这是当文件存在并且百分百确定只有一个名为“sample.xlsx”的文件时)

4

1 回答 1

3

我已经删除了“sample.xlsx”并执行了上面的代码;没有失败,它给了我路径名,它与文件存在时的路径相同(即在删除之前)。怎么可能?我在这里期待例外。为什么它不抛出异常?

File不在乎文件是否实际存在。它只是解决路径。无需文件存在即可获取路径

/home/tjc/a/b/c/../../file.txt

...并将其转换为规范形式

/home/tjc/a/file.txt

如果你想知道那个路径上的文件是否真的存在,可以exists()使用.


关于你的第二个不相关的问题:

二、我想对文件名使用正则表达式,如:“../../xml_tutorial/samp.*”。但这不起作用,它给了我 IOException。为什么它无法识别文件 sample.xlsx ?

File文档中没有任何内容说它支持通配符。如果你想进行搜索,你会想要使用list(FilenameFilter)orlistFiles(FilenameFilter)和一个FilenameFilter实现,或者listFiles(FileFilter)和一个FileFilter实现。

于 2013-05-04T14:06:54.003 回答