2013-07-03 38 views
0

我正在寫一個java代碼來通過一個.sfo文件(SQL和Fortran的組合)並刪除一組字符,只要它們出現在文件中。我在64位Windows 7機器上使用Eclipse,如果這有什麼區別的話。該代碼正在做我想做的事情,刪除字符塊以及其他內容,但最後,在給我輸出之後,它顯示 「錯誤:沒有這樣的文件或目錄。」 我不知道爲什麼;我所引用的唯一外部文件是前面提到的.sfo。該文件存在,並且我在代碼中指定的文件路徑是正確的。我有權讀取和寫入文件。 這裏是我的代碼(更多或更少;很多是重複的,所以我就砍了一些不重要的東西):Java FileInputStream錯誤:「沒有這樣的文件或目錄」

絕對路徑是

C:/Users/frencke/p4/frencke_LOHEPCE00294173/pcs/main/lib/gp/file.sfo.

是的,我有充分的文件權限。

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

public class StringSplit { 
    public static void main(String args[]) { 
     try { 
      ArrayList<String> arr = new ArrayList<String>(); 
      // Here I initialized a bunch of ArrayLists; nothing relevant 
      ArrayList<String> arr26 = new ArrayList<String>(); 
      FileInputStream fstream = new FileInputStream(
        "C:/Users/.../file.sfo"); 
      BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
      String strLine; 
      while ((strLine = br.readLine()) != null) { 
       arr.add(strLine); 
       String[] temp; 
       String delimiter = "\\s+\\s+\\s+\\s+\\s+&\\s+"; 
       temp = strLine.split(delimiter); 
       for (int i = 0; i < temp.length; i++) 
        arr2.add(temp[i]); 
       // Here I did all of the removal of the various blocks of text 
       String[] temp27; 
       String delimiter27 = "\t9"; 
       String strLine27 = null; 
       for (int i = 0; i < temp26.length; i++) 
        strLine27 = temp26[i]; 
       temp27 = strLine27.split(delimiter27); 
       for (int i = 0; i < temp27.length; i++) 
        System.out.println(temp27[i]); 
       in.close(); 
      } 
     } catch (Exception e) { 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 
} 

同樣,我得到了錯誤的信息是: 「錯誤:沒有這樣的文件或目錄。」如果有人知道這是爲什麼發生,我很樂意聽到它;謝謝!

+0

file.sfo的絕對路徑是什麼? –

+0

該文件是否具有讀取權限? –

+0

對不起,如果我不清楚; 「...」只是顯示了我在本網站上爲了閱讀目的而剪下的大部分文件路徑。絕對路徑在代碼中是完整的(它是C:/Users/frencke/p4/frencke_LOHEPCE00294173/pcs/main/lib/gp/file.sfo)。是的,我對該文件擁有完全權限。 –

回答

1

您在while循環的第一次迭代結束時關閉了InputStream - 這釋放了與該流關聯的所有系統資源。

當您嘗試readLine()時,流已經被釋放,所以這就是爲什麼它說沒有這樣的文件存在。

我認爲你的意思是把in.close()後循環,應該工作。

+0

是的,這是問題所在。我改變了這一點,現在它工作正常。謝謝! –

0

試圖給這樣 文件路徑爲 「C:\\ \\用戶\\ ... file.sfo」

+0

剛剛嘗試過;相同的錯誤信息。 –

0

只是刪除 「/」 字符與File.separator。例如:

String path = "C:/Users/.../file.sfo"; 
path = path.replaceAll("//",File.separator); 
FileInputStream fstream = new FileInputStream(path); 
+0

這似乎沒有幫助;我認爲斯米特已經想通了。關於我關閉DataInputStream的地方。 –

相關問題