私はちょっとしたプログラムに取り組んでいます。そこで、適切なタイトルや数字などを挿入できるようにするコードを作成しました。これにより、適切な場所にある 4 つの異なるファイルに入力がコピーされます。編集しやすいようにいくつかのファイル (.xml と .html) を用意しました。キーワードを使用してから、.replaceAll("", ""); を使用します。
私の計画は、準備したファイルをリソースとして保持することです。そのため、.jar をコンピューターの任意の場所にドラッグして、プログラムがリソースから新しいファイルを生成し、.jar と同じディレクトリにあるファイルを編集できるようにします。
わかりましたので、Eclipse 経由でアプリケーションを起動するときはいつでも、すべて問題ありません。プログラムは、テンプレートを使用して入力に基づいて新しいファイルを作成し、編集対象として選択した既存のファイルを編集します。しかし、すべてを .jar にエクスポートすると、プログラムはエラーやそのようなものなしで、ある時点で停止します。
jarpath = getClass().getProtectionDomain().getCodeSource()
.getLocation().getPath().substring(1);
//substring removes a /
jarpathparent = jarpath.replace("alpha.jar", "");
// replacing with "" to get the only the directory where the .jar is.
public void generate(String s) throws IOException {
String path = "", content = "";
File file = null, outputfile = null;
switch (s) {
case "index":
Dialog.info("", "1");
path = getClass().getResource("index.html").toString()
.replace("file:/", "");
Dialog.info("", "2");
file = new File(path);
Dialog.info("", "3");
outputfile = new File(jarpathparent + "/index.html");
Dialog.info("", "4");
content = FileUtils.readFileToString(file);
Dialog.info("", "5");
content = content.replaceAll("XforTitle", title);
Dialog.info("", "6");
FileUtils.writeStringToFile(outputfile, content);
Dialog.info("", "7");
break;
case "index2":
.
.
.
プログラムが停止する場所を見つけるために、作成した小さなダイアログクラスを使用しました。4 番目のダイアログ ボックスは、最後に表示されるダイアログ ボックスであるため、問題は次のようになります。
content = FileUtils.readFileToString(file);
何が悪いのか正確にはわかりませんが、apache-commons-io (FileUtils) などを使用しているためでしょうか?
そして、コード全体を含むペーストビン リンク: http://pastebin.com/Px7SygYu (イメージラベルと .wav は単なる娯楽用です。)
__ _ __ _ __ _ __編集_ _ _ __ _ _ __ _ _ _ _
これで、リソース コンテンツをロードできるようになりました
を使用して
InputStream input = getClass().getResourceAsStream("/classpath/to/my/file");
からのコードスニペット
http://www.mkyong.com/java/how-to-convert-inputstream-to-string-in-Java/
だから私は今、ファイルの内容を文字列として持っており、それを新しいファイルに書きたいと思っています(.jarを置くディレクトリ内)
InputStream input = getClass().getResourceAsStream("index.html");
content = getStringFromInputStream(input);
Dialog.info("", "2");
outputfile = new File(jarpathparent + "index.html");
Dialog.info("", "3");
content = content.replaceAll("XforTitle", title);
Dialog.info("", "4");
Dialog.info("", outputfile.getPath());
try {
FileUtils.writeStringToFile(outputfile, content);
} catch (Exception e) {
Dialog.vielText("", e.toString());
}
Dialog.info("", "5");
そのため、FileUtils.writeStringToFile(...); でクラッシュするようになりました。しかし、try catchでキャッチする必要がある例外を除いて、ダイアログはわかりません。コードでわかるように、出力パスを確認しましたが、問題ないようです。修正方法、または文字列 (.html テンプレートを含む) を File に書き込む方法について、他のアイデアはありますか?