2013-02-10 59 views
2

我确实有一些序列化代码不起作用。我试图在if语句中插入CanRead()和CanWrite(),这表明他们没有读写权限。我也尝试将'java.io.File.setReadable'和'java.io.File.setWriteable'插入为true,但仍然会抛出错误。IOException在java.io.File.createNewFile();

的代码如下:

public static void save(Object obj, String filename) throws FileNotFoundException, IOException 
{ 
    File f = new File("c:/DatoChecker/" + filename); 
    File dir = new File("c:/DatoChecker"); 
    if(!dir.exists()) 
     dir.mkdirs(); 
    f.setReadable(true); 
    f.setWritable(true); 
    if(!f.exists()) 
    { 
     f.createNewFile(); 
    } 
    FileOutputStream op = null; 
    ObjectOutputStream objectStream = null; 
    op = new FileOutputStream(f); 
    objectStream = new ObjectOutputStream(op); 
    objectStream.writeObject(obj); 
    objectStream.close(); 
} 

public static Object fetch(String filename) throws FileNotFoundException, IOException, ClassNotFoundException 
{ 
    File f = new File("c:/DatoChecker" + filename); 
    File dir = new File("c:/DatoChecker"); 
    if(!dir.exists()) 
     dir.mkdirs(); 
    f.setReadable(true); 
    f.setWritable(true); 
    if(!f.exists()) 
    { 
     f.createNewFile(); 
    } 
    FileInputStream ip = null; 
    ObjectInputStream objectStream = null; 
    Object obj = null; 
    ip = new FileInputStream(f); 
    objectStream = new ObjectInputStream(ip); 
    obj = objectStream.readObject(); 
    ip.close(); 
    objectStream.close(); 
    return obj; 
} 

堆栈跟踪:

SEVERE: null 
java.io.IOException: access denied 
    at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createNewFile(File.java:947) 
    at com.check.me.Serialization.fetch(Seralization.java:39) 
    at com.check.me.GoodsList.load(GoodsList.java:82) 
    at com.check.me.START.main(START.java:22) 

的一个用于保存从商品详细congruet(只保存而不是负载)和最多却是相当长的时间在下面,所以我现在就离开它。

感谢您的帮助提前
Highace2

+0

http://stackoverflow.com/a/23697734/715269 – Gangnus 2014-05-16 14:24:12

+0

@Gangnus你可能已经注意到了,这个问题已经被回答了。它不是如何创造的,而是它指定的范围。基本上选择正确的目录。 – Highace2 2014-05-17 20:46:58

+0

问题是,它是重复的问题。它必须关闭,评论,但没有回答。 – Gangnus 2014-05-19 08:22:20

回答

4

你,你没有状态权限读取或写入。而且,事实上,你得到一个错误,告诉你你没有权限。您需要更改要创建文件的目录中的ACL,或者选择其他目录。

+0

我现在更新我的代码(请参阅第一篇文章),在C:/ - 目录中创建另一个目录。现在它可以保存文件但不加载它们。它仍然会抛出相同的异常。 – Highace2 2013-02-10 14:54:12

+0

@ Highace2注意在'fetch()'方法中文件名缺少一个斜杠,它应该是: 'File f = new File(“c:/ DatoChecker /”+ fileName);' – 2013-02-10 14:59:58

+0

解决了问题!谢谢! – Highace2 2013-02-10 15:04:59