Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileInputStream错误:";没有这样的文件或目录;_Java_Fileinputstream - Fatal编程技术网

Java FileInputStream错误:";没有这样的文件或目录;

Java FileInputStream错误:";没有这样的文件或目录;,java,fileinputstream,Java,Fileinputstream,我正在编写一个java代码来遍历.sfo(SQL和Fortran的组合)文件,并在文件中出现某些字符时删除它们。我在64位Windows7机器上使用Eclipse,如果这有什么不同的话。代码正在做我想做的事情,删除字符块等等,但最后,在它给出我的输出后,它显示了 “错误:没有这样的文件或目录。” 我不知道为什么;我引用的唯一外部文件是前面提到的.sfo。该文件存在,并且我在代码中指定的文件路径是正确的。我有读取和写入文件的权限。 这是我的代码(或多或少;很多代码都是重复的,所以我会删掉一些不重要

我正在编写一个java代码来遍历.sfo(SQL和Fortran的组合)文件,并在文件中出现某些字符时删除它们。我在64位Windows7机器上使用Eclipse,如果这有什么不同的话。代码正在做我想做的事情,删除字符块等等,但最后,在它给出我的输出后,它显示了 “错误:没有这样的文件或目录。” 我不知道为什么;我引用的唯一外部文件是前面提到的.sfo。该文件存在,并且我在代码中指定的文件路径是正确的。我有读取和写入文件的权限。 这是我的代码(或多或少;很多代码都是重复的,所以我会删掉一些不重要的东西):

绝对路径是

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());
        }
    }
}
导入java.io.BufferedReader;
导入java.io.DataInputStream;
导入java.io.FileInputStream;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
公共类StringSplit{
公共静态void main(字符串参数[]){
试一试{
ArrayList arr=新的ArrayList();
//这里我初始化了一堆ArrayList;没有相关内容
ArrayList arr26=新的ArrayList();
FileInputStream fstream=新FileInputStream(
“C:/Users/../file.sfo”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(fstream));
弦斯特林;
而((strLine=br.readLine())!=null){
arr.add(strLine);
字符串[]温度;
字符串分隔符=“\\s+\\s+\\s+\\s+\\s+\\s+&\\s+”;
temp=strLine.split(分隔符);
对于(int i=0;i
同样,我收到的错误消息是: “错误:没有这样的文件或目录。”
如果有人知道为什么会发生这种情况,我很想听听;谢谢

尝试这样给出文件路径 “C:\\Users\\\…\\file.sfo”

只需删除带有
file.separator的“/”字符即可。例如:

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

您将在while循环的第一次迭代结束时关闭InputStream-这将释放与该流关联的所有系统资源

当您尝试readLine()时,流已经被释放,所以它说不存在这样的文件


我想你是想在循环后将
放入.close()
,应该可以。

file.sfo的绝对路径是什么?该文件是否具有读取权限?如果我不清楚,请原谅;这个“…”只是显示了我在这个网站上为了阅读而剪切了文件路径的很大一部分。绝对路径完整地存在于代码中(它是C:/Users/frencke/p4/frencke_LOHEPCE00294173/pcs/main/lib/gp/file.sfo)。是的,我对该文件拥有完全权限。@ItsanAlias我编辑注释信息。请下次在OP中进行编辑,并说明为什么
delimiter=“\\s+\\s+\\s+\\s+\\s+\\s+&\\s+”
?@ItsanAlias您正在关闭
while
循环中的
数据输入流。无论如何,您仍然可以使用
\\s+
将遇到一个或多个空格。这似乎没有帮助;我想斯密特已经弄明白了。关于我关闭DataInputStream的位置。是的,这就是问题所在。我改变了主意,现在效果很好。谢谢