2012-02-03 42 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); 
}