0

私のプログラムには、リソースからファイルを読み書きする機能があります。この機能はスムーズにテストしました。たとえば、ファイルに何かを書き込んで、再起動して再度ロードすると、そのデータを再度読み取ることができます。

しかし、jarファイルにエクスポートした後、ファイルを書き込むときに問題が発生しました。これがファイルを書くための私のコードです:

URL resourceUrl = getClass().getResource("/resource/data.sav");
File file = new File(resourceUrl.toURI());
FileOutputStream output = new FileOutputStream(file);
ObjectOutputStream writer = new ObjectOutputStream( output);

このコードを実行すると、コマンドプロンプトでエラーが発生しまし 私のエラー た。データを保存できません。(アプリを再起動した後、何も変更されていないので、私はそれを知っています!!!)

この問題を解決するのを手伝ってください。

ありがとう :)

4

2 に答える 2

2

この方法でjarファイルにファイルを書き込むことはできません。取得するURIはURIではgetResource()なく、 コンストラクターfile:///に渡すことはできません。java.io.File'szipファイルを作成する唯一の方法はjava.util.zip、この目的のために設計されたクラスを使用することです。これらのクラスは、データを1つのファイル内の単一のファイルにストリーミングするのではなく、jarファイル全体を作成できるように設計されています。実際のインストールでは、とにかく、ユーザーはjarファイルに書き込む権限さえ持っていない可能性があります。

データをファイルシステム上の実際のファイルに保存する必要があります。データが十分に小さい場合は、設定APIを使用して保存する必要があります。

于 2012-04-13T12:01:31.623 に答える
-2

jarファイルから読み取るには、ファイルを入力ストリームとして読み書きする必要があります。

public static String getValue(String key)
    {
        String _value = null;
        try 
        {
            InputStream loadedFile = ConfigReader.class.getClassLoader().getResourceAsStream(configFileName);
            if(loadedFile == null) throw new Exception("Error: Could not load the file as a stream!");
            props.load(loadedFile);
        }
        catch(Exception ex){
            try {
                System.out.println(ex.getMessage());
                props.load(new FileInputStream(configFileName));
            } catch (FileNotFoundException e) {
                ExceptionWriter.LogException(e);
            } catch (IOException e) {
                ExceptionWriter.LogException(e);
            }
        }
        _value =  props.getProperty(key);
        if(_value == null || _value.equals("")) System.out.println("Null value supplied for key: "+key);
        return _value;
    }
于 2012-04-13T12:05:07.563 に答える