このコードは、私が使用しているライブラリからのもので、エラーのために逆コンパイルしました。
Windows 32 では、プログラムを起動するユーザーがマシンの管理者である場合は正しく動作しますが、そうでない場合はクラッシュします。Linuxでもクラッシュします。
/* */ public static String cambiaEstensione(String nomeFile, String nuovaEstensione)
/* */ {
/* 140 */ int p = nomeFile.lastIndexOf('.');
/* 141 */ if (p < 0) {
/* 142 */ return nomeFile + "." + nuovaEstensione;
/* */ }
/* 144 */ return nomeFile.substring(0, p) + "." + nuovaEstensione;
/* */ }
関数の呼び出し元は次のとおりです。
/* 182 */ if (this.fl_scrivi) {
/* 183 */ stato = "Apertura archivio dichiarazioni da inviare...";
/* 184 */ this.dcm = new Dcm();
/* 185 */ this.dcm.setNomeDcm(Util.cambiaEstensione(args[2], "dcm"));
/* 186 */ this.dcm.setFileDcm(new FileOutputStream(this.dcm.getNomeDcm()));
/* */ }
例外は次のとおりです。
java.io.FileNotFoundException: .dcm (Accesso negato)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at it.finanze.entrate.sco.main.M77S11.elaboraFile(M77S11.java:186)
「 Accesso negato」は「Access Denied」を意味します。
エラーの理由を理解するのを手伝ってもらえますか?
更新:問題の理由は、空の文字列を渡していたためですargs[2]
。
管理者権限を持つWindowsでは、ファイルを作成したためクラッシュしませんでしたC:\.dcm
.
回答してくださった皆様、どうもありがとうございました。