2012-05-11 4 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) 

"Accesso negato"は意味"アクセスが拒否されましたを"。

エラーの原因を理解できたら助かりますか?


UPDATE:問題の理由は、私はargs[2]に空の文字列を渡したということでした。

アドミニストレーター特権を持つWindowsでは、ファイルC:\.dcmが作成されたためクラッシュしませんでしたが、機能やバグを考慮する必要があるかどうかはわかりません。

お返事いただいた皆様、本当にありがとうございます。

答えて

1

も参照してください。

java.io.FileNotFoundException: .dcm (Accesso negato) 

"という名前のファイルが見つかりません。DCM」それはそうそう:

どちらのは、呼び出し元の関数は、[2]このライン

this.dcm.setNomeDcm(Util.cambiaEstensione(args[2], "dcm")); 

OR(以降で空の文字列を返し言い換えるの引数には、ファイル名の空の文字列を渡しますこれは引数[2]

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

戻り値がゼロので、このラインと、このラインを「.something拡張子」のような値を含む)は、Linux上で発生

return nomeFile.substring(0, p) + "." + nuovaEstensione; 

返し+ "" +拡張子だけで空の文字列。 (すなわち ".dcm ")

Linuxは

+0

グラツィエミルパオロ!私はそのパラメータに空の文字列を渡すだけでした。 –

0

ファイルが実際に存在し、正しいアクセス権を持っているかどうかを確認する必要があります。

1

は、何らかの理由で文字列".dcm"を返します。その名前のファイルは存在しません。これは驚くべきことではありません.Windowsアプリは通常、そのような拡張子だけを持つファイルに名前を付けません。

4

Javaはわかりませんが、アクセス拒否エラー(「java.io.FileNotFoundException:.dcm(Accesso negato)」)が表示されるようです。

あなたは正しいアクセス権を持っていますか?

+0

はい、それはすべてのユーザーが書き込みを読んで、 –

+0

を実行することができる上のフォルダが正しい権限がこのフォルダに書き込むために、あなたのプログラムを実行しているアカウントを持っているのですか? – Julien

1

「アクセスネガート」とは、ファイルを開く権限がないことを意味します。ファイルを別のディレクトリに移動したり、管理者としてプログラムを実行したり、必要な権限を変更したりすることができます。 Linux上で

あなたがls -l <file> を使用してアクセス権をチェックし、chmod 666 <file>でそれらを変更することができます(すべての権限を読み書き)

は、それはスタックトレースに権利がありますchmod

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

隠しファイルを示すために" は.filename" を使用していますnomeFileが空の文字列である場合、これは-1を返しますとfollowgin条件が真である:

この

if (p < 0) { 
    return nomeFile + "." + nuovaEstensione; 
} 
は空の文字列、ドットと、ファイル拡張子に渡されたので、「.dmc」を返すのconcatentationを返します。この名前のファイルは存在しないようです。

関連する問題