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();
    }
}

私はエクリプスを使用しています。ファイルは 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
4

1 に答える 1

2

このClassLoader.getSystemResource("settings.txt")コードは null を返し.getFile()NPE


コメントへの回答

getSystemResourceまず、外部リソースのメソッドではないことを理解する必要があります これを読んで ください jarから外部リソースをロードするには、リソースへのフルパス、フル!=絶対、フルパスを見つける方法を使用する必要があります

start point + path to resource

たとえば、次のファイル構造/Users/fakeuser/tetsproject/があります。このフォルダーには jar が含まれ、confフォルダーには が含まれているか含まれている必要がsettings.txtあります。このような配信構造がある場合、コードは次のようになります。

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

それだけです。

于 2012-09-30T19:00:27.463 に答える