2012-09-30 79 views
0

我試圖創建一個在文件不存在時寫入文件的塊,但它已經變成了Catch-22。該文件不存在,所以它不能寫入文件,因此它可能存在。這是我的嘗試:如果不存在,寫入文件

if(!FileReadWrite.file2.exists()) 
     FileReadWrite.fileWrite(); 

public static File file2 = new File("./settings.txt"); 

public static void fileWrite() 
{ 
    try 
    { 
     FileWriter fstream = new FileWriter(file2); 
     BufferedWriter out = new BufferedWriter(fstream); 
     String c = Byte.toString(Textures.a); 
     out.write(c); 
     out.close(); 
    }catch (Exception e) 
    { 
     System.err.println("Error: " + e.getMessage()); 
    } 
    int ch; 
    StringBuffer strContent = new StringBuffer(""); 
    InputStream fin = null; 
    try 
    { 
     fin = new FileInputStream(file2); 
     while ((ch = fin.read()) != -1) 
     { 
      strContent.append((char) ch); 
     } 
    fin.close(); 
    } catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

我正在使用Eclipse。該文件位於bin文件夾中,但當我將其導出到jar文件時,它位於jar文件夾之外。

Exception in thread "main" java.lang.ExceptionInInitializerError 
at srcD.Main.<init>(Main.java:19) //(FileReadWrite.fileWrite()) 
at srcD.Main.main(Main.java:129) //(Make JFrame) 
Caused by: java.lang.NullPointerException 
at srcD.FileReadWrite.<clinit>(FileReadWrite.java:7) //(public file...) 
... 2 more 
+0

您需要與有權在jar所在的文件夾中創建文件的用戶執行jar。 –

+0

@LuiggiMendoza我有這些特權。 – Coupon22

+0

發佈堆棧跟蹤。 –

回答

2

我覺得這ClassLoader.getSystemResource("settings.txt")代碼返回null,.getFile()得到一個NPE


回答評論

首先你應該明白,方法getSystemResource不是外部資源read this 對於負載外部資源從jar你必須使用完整的路徑來資源,完全!=絕對, 如何找到fu LL路徑

start point + path to resource 

例如,我們接下來的文件結構/Users/fakeuser/tetsproject/ - 此文件夾包含您的罐子和conf文件夾中包含或應包含settings.txt,如果你有輸送結構類似這樣的代碼將出現

public static File file2 = new File("./conf/settings.txt"); 

就是這樣。

+0

沒有Stacktrace,很難找到該錯誤。很好的方式。 –

+0

你是對的。我如何修復它?我不知道在jar之外加載文件的其他方式,我必須包含.getFile()。 – Coupon22

+0

@LuiggiMendoza爲什麼不,它是代碼的一部分,沒有try {} catch塊和長初始化結構。 –

相關問題