2013-07-03 35 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的地方。 –

相关问题