【发布时间】:2012-05-11 07:24:50
【问题描述】:
此代码来自我使用的库,但由于错误而反编译。
在 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” 表示“拒绝访问”。
你能帮我理解错误的原因吗?
更新:问题的原因是我在args[2]中传递了一个空字符串。
在具有管理员权限的 Windows 上,它没有崩溃,因为它创建了文件 C:\.dcm,不确定我是否必须考虑这是一个功能或错误。
非常感谢所有回答的人。
【问题讨论】: