此代码来自我使用的库,并且由于错误而反编译。
在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
,不确定我是否必须考虑该功能或错误。
非常感谢所有回答的人。
答案 0 :(得分:4)
不知道Java,但看起来你收到了拒绝访问错误(“java.io.FileNotFoundException:.dcm(Accesso negato)”)。
您确定自己拥有正确的访问权限吗?
答案 1 :(得分:1)
调用this.dcm.getNomeDcm()
返回字符串".dcm"
(无论出于何种原因),并且不存在具有该名称的文件。这并不奇怪,因为Windows应用程序通常不会像这样的扩展名命名文件。
答案 2 :(得分:1)
我猜“Accesso negato”表示您没有打开文件的权限。您可以尝试将文件移动到另一个目录,以管理员身份运行程序,或更改所需的权限。
在Linux上,您可以使用ls -l <file>
检查权限
并使用chmod 666 <file>
(所有人的读写权限)更改它们
另见chmod
答案 3 :(得分:1)
它就在堆栈跟踪中。
java.io.FileNotFoundException: .dcm (Accesso negato)
找不到名为“.dcm”的文件,所以看起来似乎是:
要么调用函数传递一个空字符串作为文件名,换句话说args [2]在这一行返回一个空字符串
this.dcm.setNomeDcm(Util.cambiaEstensione(args[2], "dcm"));
OR (因为这发生在Linux上)args [2]包含类似“.something”的值所以这一行
int p = nomeFile.lastIndexOf('.');
返回零,然后返回此行
return nomeFile.substring(0, p) + "." + nuovaEstensione;
返回空字符串+“。” +扩展名。 (即“.dcm”)
Linux使用“.filename”来表示隐藏文件
答案 4 :(得分:1)
int p = nomeFile.lastIndexOf('.');
如果nomeFile
是空字符串,那么这将返回-1并且followgin条件为true:
if (p < 0) {
return nomeFile + "." + nuovaEstensione;
}
这将返回空字符串,点和传入文件扩展名的连接,从而返回“.dmc”。具有此名称的文件似乎不存在。
答案 5 :(得分:0)
您应该检查文件是否确实存在且具有正确的权限。