我正在编写一个 java 代码来遍历 .sfo(SQL 和 Fortran 的组合)文件,并在文件中出现某些字符时删除它们。我在 64 位 Windows 7 机器上使用 Eclipse,如果这有什么区别的话。代码正在做我想做的事情,删除字符 block 之类的东西,但最后,在它给我输出后,它显示 “错误:没有这样的文件或目录。” 我不知道为什么;我引用的唯一外部文件是前面提到的 .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());
}
}
}
我再次收到的错误消息是: “错误:没有这样的文件或目录。” 如果有人知道为什么会发生这种情况,我很想听听;谢谢!
最佳答案
您将在 while 循环的第一次迭代结束时关闭 InputStream - 这会释放与流关联的所有系统资源。
当您尝试 readLine() 时,流已被释放,因此它显示“不存在此类文件”。
我认为您的意思是将 in.close()
放在循环之后,这应该可以工作。
关于Java文件输入流错误: "No such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455451/