これは私の状況です。私は<!ENTITY>
宣言をXMLファイルに書いています。私はスキャナを使って元のXMLファイルを読みました。スキャナが入力ファイルを読み込むと、ラインがBufferedWriterに書き込まれます。スキャナが2行目にあるときは、メソッドに渡されたArrayListの値を<!ENTITY>
と書きます。私の<!ENTITY>
の値は問題ありません。私が抱えている問題は、出力ファイルに書き込まれるファイルが400行ほどしかないということです。Java BufferWriterがファイルの書き込みを完了していません
私はここBufferedWritersがファイルへの書き込みが完了していないに関する上のいくつかの記事を読んできた、とすべてが閉じているライターを確保することを指すように見えました。私は私の作家オブジェクトを閉じました。
private void addEntityRefs(Map<String, String> icns, File xml)
{
String path = xml.getAbsolutePath().substring(0,xml.getAbsolutePath().lastIndexOf(File.separator)+1);
ArrayList<String> list = new ArrayList<String>();
Scanner reader = null;
BufferedWriter writer = null;
for(Map.Entry<String, String> e : icns.entrySet())
{
list.add(e.getValue());
}
try
{
reader = new Scanner(xml);
//standardOut.println("Reading " + xml.getName());
//System.out.println();
int c = 0;
String output = path + "out2.xml";
writer = new BufferedWriter(new FileWriter(new File(output)));
while(reader.hasNextLine())
{
c++;
if(c == 1)
{
writer.append(reader.nextLine().replaceAll("\\s", " "));
}
else if(c == 2)
{
System.out.println("writing entities @ line 2");
writer.append("\n<!DOCTYPE pm [\n");
for(int i = 0; i < list.size(); i++)
{
writer.append("<!ENTITY " + list.get(i).trim() + " SYSTEM \"" + list.get(i).trim() + ".cgm\" NDATA cgm>\n");
}
writer.append("<!NOTATION cgm PUBLIC \"cgm\" \"\">\n]>\n");
}
else
{
System.out.println("Writing line " + c);
writer.append(reader.nextLine().replaceAll("\\s", " ")+ "\r");
}
}
}
catch (FileNotFoundException ex)
{
Logger.getLogger(AARPdfGenUI.class.getName()).log(Level.WARN, null, ex);
JOptionPane.showMessageDialog(this, ex, "File Not Found Exception", JOptionPane.ERROR_MESSAGE);
}
catch (IOException ex)
{
Logger.getLogger(AARPdfGenUI.class.getName()).log(Level.WARN, null, ex);
JOptionPane.showMessageDialog(this, ex, "IO Exception", JOptionPane.ERROR_MESSAGE);
}
finally
{
try
{
reader.close();
writer.close();
}
catch(Exception e)
{
Logger.getLogger(AARPdfGenUI.class.getName()).log(Level.WARN, null, e);
JOptionPane.showMessageDialog(this, e, "Exception", JOptionPane.ERROR_MESSAGE);
}
}
}
ライターの出力は、PDFを生成するために使用されます。読み込まれたファイルと<!ENTITY>
宣言が追加された行は約26,000行です。誰かが私が間違っているところへ私を向けることができますか?このメソッドは、NetBeansからアプリケーションを実行すると問題なく動作しますが、一度ビルドしてJARファイルから実行しようとすると、約400行後に停止します。
関連するログメッセージはありますか? 'while'ループが正常に終了するか例外を伴って終了するかを知っていますか? –
@StephenCいいえ、ログメッセージはありません。私はそれがIDEでうまく動作する方法については迷っていますが、ビルドすると書き込みが完了しません。 – twfurst
あなたは2番目の質問に答えませんでした。 –