2013-02-10 57 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