0

これが以前に投稿されていた場合は、申し訳ありません。

私がやろうとしているのは、プロジェクトのパッケージの 1 つにあるファイルに単純な文字列を読み書きすることです。ソース パッケージの内部 "resources" というパッケージがあります。ここで、 というファイルを読み込んで、myfile.txt何らかの処理を行い、再度 として保存しnewmyfile.txtます。CSVデータを簡単に読み込んで保存するだけ。

次のようなリーダーを作成しました。

public BufferedReader getFileReader(String fileNameWithExtension, String sourcePackage) {
        try {
            String file = "/" + sourcePackage + "/" + fileNameWithExtension;
            BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(file)));
            return br;
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
            return null;
        }
    }

これは私の Mac では問題なく動作します。これを読んでみると、すべてのオペレーティング システムで動作させるには File.separator を使用する必要があることがわかりました。だから私はこれを変更しますが、それでも機能しません。/どこかで、相対パスを使用する場合、オペレーティング システムに関係なく、常に相対パスが で始まると言われてい../ます。Java でのファイル ストレージの完全な初心者として、私は混乱しています。

ファイルを読み書きする方法もたくさんありますが、どの方法を選択すればよいのか、またその理由はわかりません。

1 つの長い文字列または文字列の配列を保存するだけのファイルを読み取って作成するための最良の方法は何ですか?

4

2 に答える 2

1

私は他のことに忙しいのですが、あなたの助けを借りて、MacとWindowsで動作するソリューションを見つけました。

奇妙な理由で、String file = "/" + sourcePackage + "/" + fileNameWithExtension;私のMacで読むために機能するのはそれだけです。突然(コード変更は行われていません)、Windowsでも機能し始めました。何故かはわからない。したがって、リーダーを取得するための作業コードは次のようになります。

public BufferedReader getFileReader(String fileNameWithExtension, String sourcePackage) {
        try {
            String file = "/" + sourcePackage + "/" + fileNameWithExtension;
            BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(file)));
            return br;
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
            return null;
        }
    }

resoursesフォルダー内のファイルに書き込むために、私は以下を使用しました。

public BufferedWriter getFileWriter(String fileNameWithExtension, String sourcePackage) {
        Writer output = null;
        File file = new File("src" + File.separator + sourcePackage + File.separator + fileNameWithExtension);
        try {
            output = new BufferedWriter(new FileWriter(file));            
            return (BufferedWriter) output;
        } catch (IOException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

悲しいことに、を取得する方法と同じではありませんReaderWriter、機能します。

于 2012-11-15T10:44:43.110 に答える
0

重要なことは、絶対パスは常に「/」で始まるということです。相対パスは「/」で開始することはできません。それは、少なくとも問題の原因の一部です。

それ以外については、「うまくいかない」と言います。しかし、何がうまくいかないのですか?

于 2012-11-09T09:28:40.237 に答える