2012-05-11 149 views
0

此代码来自我使用的库,并且由于错误而反编译。此代码何时崩溃?

在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) 

“配件系列negato”“拒绝访问”。

你能帮助我理解错误的原因是什么?


UPDATE:问题的原因是,我是传递一个空字符串args[2]

在Windows上使用管理员权限也没有崩溃,因为它创建的文件C:\.dcm,不知道如果我要考虑的是一个功能或错误。

非常感谢大家的回答。

回答

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” 表示隐藏文件

+0

Grazie mille Paolo!我只是将一个空字符串传递给该参数。 –

0

你应该检查文件是否真的存在并且具有正确的权限。

1

呼叫this.dcm.getNomeDcm()返回字符串".dcm"(无论何种原因),并用该名称不存在的文件。这并不令人意外,因为Windows应用程序通常不会仅以这样的扩展命名文件。

4

不知道Java,但它看起来像你收到拒绝访问错误(“java.io.FileNotFoundException:.DCM(配件系列negato)”)。

您确定您拥有正确的访问权吗?

+0

是的,它是所有用户都可以读写并执行的文件夹 –

+0

运行程序的帐户是否具有写入此文件夹的正确权限? – Julien

1

我猜“配件系列negato”意味着您不必打开文件的权限。您可以尝试将文件移至其他目录,以管理员身份运行程序,或更改所需的权限。

在Linux上,您可以检查使用ls -l <file> 的权限,并与chmod 666 <file>改变他们(读取和写入所有许可)

参见chmod

1
int p = nomeFile.lastIndexOf('.'); 

如果nomeFile是空字符串,那么这将返回-1,followgin条件为真:

if (p < 0) { 
    return nomeFile + "." + nuovaEstensione; 
} 

这将返回一个空字符串,一个点和传入的文件扩展名的concatentation,从而返回“.dmc”。具有此名称的文件似乎不存在。