2012-02-03 38 views
6

我试图打开带有的FileInputStream具有在其名称中的空格的文件。的Java读取空白文件在其路径

例如:

String fileName = "This is my file.txt"; 
String path = "/home/myUsername/folder/"; 

String filePath = path + filename; 
f = new BufferedInputStream(new FileInputStream(filePath)); 

其结果是,一个FileNotFoundException异常被抛出。 我试图硬编码filePath到"/home/myUserName/folder/This\\ is\\ my\\ file.txt"只是为了看看我是否应该逃避空白字符,它似乎并没有工作。 关于此事的任何建议?

编辑:只是在同一页面上,每个人都在查看这个问题......打开一个没有空白的文件名称的作品,其中有空白的文件失败。权限不是这里的问题,也不是文件夹分隔符。

+0

http://stackoverflow.com/questions/5358850/accessing-files-with-spaces-in-filename-from-java – 2012-02-03 11:59:21

回答

3

文件名工作得很好

这里是我的代码

File f = new File("/Windows/F/Programming/Projects/NetBeans/TestApplications/database prop.properties"); 
     System.out.println(f.exists()); 
     try 
     { 
      FileInputStream stream = new FileInputStream(f); 
     } 
     catch (FileNotFoundException ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 

f.exists()回报true始终没有任何问题

+0

感谢您告诉我,我首先必须使用文件(路径),然后将其发送到FileInputStream。 – user253530 2012-02-03 12:16:23

+0

@ user253530:您是否暗示您的原始代码无法工作,并将'filePath'封装到'File()'中使其工作?! – NPE 2012-02-03 12:18:20

+1

是的...如果我使用FileInputStream(String filePath)它不起作用....但如果我第一次做File f = new File(filePath),然后FileInputStream(f)不会抛出错误...非常奇怪.. – user253530 2012-02-03 12:23:01

0

不,你不需要逃避空格。

如果代码抛出FileNotFoundException,则该文件不存在(或者,也许你缺乏必要的权限来访问它)。

如果权限是很好,你认为该文件存在,请确保它叫什么,你认为这是所谓的。尤其要确保文件名不包含任何不可打印的字符,无意的前导空格或尾随空格等。为此,ls -b可能会有所帮助。

+0

文件可能重复没有在他们的道路空间没关系,我可以打开它们...所以权限似乎不是问题:(。 – user253530 2012-02-03 12:00:07

+1

@ user253530:向我们显示来自'ls -l'的输出,该列表列出了相关文件。 – NPE 2012-02-03 12:00:44

+0

-rw-R - R-- 1根根101 2012-02-03 11:16 add.txt -rw-R - R-- 1根根13969 2012-02-02 20:23壳1A。 txt 每个人都有阅读权限...这不是问题...我可以打开add.txt,但我无法打开CASE 1A.txt ...这是我确信的名称 – user253530 2012-02-03 12:06:45

1

看起来你有问题,而不是用在文件名中的空白文件分隔符。您是否尝试过使用

System.getProperty("file.separator") 

而不是路径变量中的'/'?与空间

+0

阅读最新编辑 – user253530 2012-02-03 12:09:00

+0

不要逃避你的空白,我相信你是在像unix/linux一样env。如果它不起作用,你正在做一些其他的错误例如。错误的文件名或其他 – Kris 2012-02-03 12:22:27

-1

路径通常空白should't关系。只要确保当你从外部源传递路径(如命令行),它不包含空格结尾:

File file = new File(path.trim()); 

如果你想有没有空格的路径,你可以把它转换到URI,然后回到路径

try { 
    URI u = new URI(path.trim().replaceAll("\\u0020", "%20")); 
    File file = new File(u.getPath()); 
} catch (URISyntaxException ex) { 
    Exceptions.printStackTrace(ex); 
}