2012-05-11 209 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」。具有此名稱的文件似乎不存在。