3

私は最も奇妙な問題を抱えています。ファイルにデータを書き込む Java クラスがあります。日食で実行すると、すべて正常に動作します(正しいエンコーディングでデータを書き込みます)。しかし、スタンドアロンの JAR として実行すると、エンコーディングが壊れます。

私のプロジェクト(pom.xml)にこれがあります:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

私のJavaクラスには、Eclipseのプロパティがあります(右クリック->プロパティ)ファイルエンコーディングがUTF-8に設定されています。

これは、追加を行う Java コードの抜粋です。

 //class field
    static BufferedWriter wr;
public static void main(String[] args) throws IOException {
        OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(args[0], true), "UTF-8");
        wr = new BufferedWriter(writer);
        //.processing logic, building up what needs to be in the file, line by line
        wr.close();
    }

.csv ファイルに追加する関連メソッド:

private void writeToCSVFile(String content){

        try {
            System.out.println(content);
            wr.write(content);
            wr.write("\n");
            wr.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

繰り返しますが、Eclipseで印刷すると、追加しているファイルと同じように出力がうまく見えます。しかし、スタンドアロンの jar エンコーディングとして実行すると、何らかの理由で壊れます。これは、関連するプラグインを構成する方法です:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>install</id>
                        <phase>install</phase>
                        <goals>
                            <goal>sources</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <finalName>Worker</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.test.automation.Testing</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

私は本当に次に何をすべきか分かりません。何か案は?

このコードには例外がなく、どこにも失敗しません。結果が書き込まれているファイルを確認すると、Eclipseで意図したとおりに実行されます。

スタンドアロンのjarとしても機能しますが、結果が書き込まれたファイルのエンコードが台無しになっていることを確認した場合のみです。

4

2 に答える 2

2

あなたが私たちに示したすべての設定は、コードの編集とコンパイルに使用されるエンコーディングを実際に指定しています。

コードを実行するときに使用されるエンコーディングについては何も述べていません。

どうやら、Eclipse で使用される jvm は、そのfile.encodingプロパティとして UTF-8 を使用します。

スタンドアロン jvm は、その file.encoding プロパティに別の値を使用します。

さらに、出力に「UTF-8」エンコーディングを明示的に指定したため、データを書き込むときではなく、データを読み取るときに問題が発生します。

2 つの解決策があります。

解決策 1:

デフォルトのエンコーディングで何かを読むことは決してありません(常に正しいエンコーディングを指定してリーダーを作成してください)。

解決策 2:

jvm に、デフォルトのエンコーディングを指定します。

java -Dfile.encoding=UTF-8 ...
于 2012-07-18T14:46:50.010 に答える
0

あなたのEclipse環境はスタンドアロン環境と同じではないことを理解する必要があります.jarファイルに欠けているクラスにお金をかけます。Eclipse で jar ファイルをエクスポートするときは、参照されている jar をパッケージ化してください。そうしないと、プログラムが失敗します。プログラムが失敗したときのスタック トレースはありますか?

于 2012-07-03T18:54:11.423 に答える