0

ネットワーク フォルダーに書き込まれるテキスト ファイルがあり、ユーザーが jar ファイルをクリックしてテキスト ファイルを読み取り、並べ替え、並べ替えたファイルを同じフォルダーに出力できるようにしたいと考えています。InputStreamしかし、ファイルを読み込むための構文のフォーマットに問題があります。

FileReadera の代わりにa を使用するとInputStreamReader、次のコードは Eclipse で正常に動作しますが、jar から実行すると空が返されます。InputStream私の研究が示唆するように変更するとNullPointerException、ファイルが見つからないようになります。

どこで私は間違えましたか?:)

public class sort {

    /**
     * @param args
     */
    public static void main(String[] args) {
        sort s = new sort();
        ArrayList<String> farmRecords = new ArrayList<String>();
        farmRecords = s.getRecords(); 

        String testString = new String(); 
        if(farmRecords.size() > 0){
            //do some work to sort the file

        }else{
            testString = "it didn't really work"; 
        }
        writeThis(testString); 
    }



public ArrayList<String> getRecords(){
        ArrayList<String> records = new ArrayList(); 
        BufferedReader br; 
        InputStream recordsStream = this.getClass().getResourceAsStream("./input.IDX");
        try {

            String sCurrentLine;
            InputStreamReader recordsStreamReader = new InputStreamReader(recordsStream);
            br = new BufferedReader(recordsStreamReader);
            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine); 
            }
            br.close();

        } catch (IOException e) {
            e.printStackTrace();
        } 

        return records; 
}

private static void writeThis(String payload){
    String filename = "./output.IDX"; 
    try {
        BufferedWriter fr = new BufferedWriter(new FileWriter(filename));
        fr.write(payload);
        fr.close();
    } catch (IOException e) {

        e.printStackTrace();
    }
}

}
4

2 に答える 2

0

getResourceAsStream()クラスパスからファイルをロードします。これをコマンドラインから実行する場合は.、クラスパスに現在のディレクトリ()が必要になります。ファイルシステムから任意のファイルをロードする場合は、を使用する必要がありますFileInputStream(またはFileReader、後で入力ストリームをリーダーでラップする必要をなくすため)。

于 2013-01-10T21:35:04.973 に答える
0

FIS を使用して jar 内のファイルを取得しても、ファイルはファイル システム自体にないため、機能しません。そのためには getResrouceAsStream() を使用する必要があります。

また、jar 内のファイルにアクセスするには、「!」を追加する必要があります。ファイルパスに。ファイルはjarの中にありますか?そうでない場合は、クラスパスを渡した後に jar を開始するスクリプトを試してください。

start.sh

    java -cp .:your.jar com.main.class.example.run

このスクリプトを (Linux で) 実行するか、プラットフォームに合わせて変更します。

また、次のコードを使用してクラスパスを出力できます。この方法で、クラスパスにファイルが含まれているかどうかを確認できますか?

ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();

    // Get the URLs
    URL[] urls = ((URLClassLoader) sysClassLoader).getURLs();

    for (int i = 0; i < urls.length; i++) {
        System.out.println(urls[i].getFile());
    }
}
于 2013-01-10T21:56:32.317 に答える