我正在尝试将简单对象(SimpleType
)写入文件,以便稍后可以加载文件并重新创建对象。
我目前正在使用Windows 7计算机上的NetBeans IDE(JDK8)。不过,我认为不应该有所作为。
这是我想写入文件的类型:
public class SimpleType implements Serializable {
boolean[] a;
boolean[] b;
}
这是我试图运行的代码:
public class Test {
public static void main(String[] args)
throws IOException, ClassNotFoundException {
String fileName = "test.txt";
SimpleType foo = new SimpleType;
try (ObjectOutputStream out = new ObjectOutputStream(new
BufferedOutputStream(new FileOutputStream(fileName)))) {
out.writeObject(foo);
out.close();
}
}
}
代码编译并运行,但始终抛出FileNotFoundException
:
Exception in thread "main" java.io.FileNotFoundException: test.txt (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at Test.main(Test.java:33)
public FileOutputStream(String name) throws FileNotFoundException
[...]
参数:
name
- 依赖于系统的文件名
抛出:
FileNotFoundException
- 如果文件存在但是相当于目录 与常规文件相比,不存在但无法创建,或者不能 因任何其他原因被打开SecurityException
- 如果存在安全管理器及其checkWrite 方法拒绝对文件的写访问权。
我确信我在目录中有读/写权限;没有名称为 test.txt 的现有文件,因此无法被其他程序锁定。
将fileName
更改为绝对路径我相信我可以写入并没有任何区别。
答案 0 :(得分:2)
如果文件处于只读模式,则可以重现。你能尝试这样吗。
public static void main(String[] args) {
String fileName = "sampleObjectFile.txt";
SampleObject sampleObject = new SampleObject();
File file = new File(fileName);
file.setWritable(true); //make it writable.
try(ObjectOutputStream outputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)))){
outputStream.writeObject(sampleObject);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
如果您在OS磁盘上编写文件,则需要管理员权限。所以避免在OS磁盘上写字。
答案 1 :(得分:1)
通常这是因为您尝试在文件系统不允许的位置写入(例如,在Windows7中,您无法在c :)中编写新文件。尝试使用Microsoft procmon中的SysInternals来调查程序尝试编写的位置。添加一个新的过滤器(路径包含test.txt),看看会发生什么。