- PR -

ファイルを削除できません

投稿者投稿内容
uniqque
常連さん
会議室デビュー日: 2005/03/18
投稿数: 43
投稿日時: 2005-03-18 16:19
Javaアプリケーションにてテキストファイルを削除するというプログラムを実装
しようと思っているのですが、うまくいきません。
削除予定file0.txt 削除予定file1.txtのように番号が順番になっている、
テキストファイルを削除しようとしています。
Indexfile.txtには全てのファイル数が入ってます。
ファイルが一個もなかったら-1を書き込みます

これが問題のコードです↓
public void ques_Delete(int i){//引数は現在選択しているListのIndexです
try{
BufferedReader br=new BufferedReader(new FileReader("Indexfile.txt"));
String line=br.readLine();
br.close();
int indexof=Integer.parseInt(line);
indexof--;//ファイルを一個削除するのでデクリメントします
PrintWriter pr=new PrintWriter(new BufferedWriter(new FileWrite("Indexfile.txt")));//デクリメントしたファイル数を書き込みます
pr.println(indexof);
pr.close();

File file1=new File("削除予定file"+i+".txt");
//ここから
if(file1.delete())System.out.println("1true");
//ここまでが削除処理です

if(indexof==-1){//ファイルが一個もなかった場合の処理です
model2.removeAllElements();
model2.addElement(new String("no question"));
}else{

for(;i<=indexof;i++){//ファイルを削除した所を埋めるために一個ずつずらしていきます
File filemb=new File("削除予定file"+(i+1)+".txt");//before
File filema=new File("削除予定file"+(i)+".txt");//after
if(filemb.renameTo(filema)){};
}    
}catch(Exception e){
e.printStackTrace();
}

}

色々とやりましたがdelete()メソッドがfalseを返しているようで、
原因がまったくわかりません。
返答お待ちしてます
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2005-03-18 16:44
file1.exists()はtrueですか?
まず、これを確認してください。
パテ太
ベテラン
会議室デビュー日: 2004/08/16
投稿数: 64
お住まい・勤務地: 千葉・東京
投稿日時: 2005-03-18 17:05
全然見当違いかもしれませんが
ファイル名がファイル名のみ(相対パス)で指定されているのが気になります。
file1.getAbsolutePath()の値は正しい値を示しているでしょうか?
実行時ディレクトリが違うためファイルを発見できないということはないですか?
はぎ丸
常連さん
会議室デビュー日: 2005/02/02
投稿数: 36
投稿日時: 2005-03-18 17:20
こんにちは。
消そうとしているファイルは絶対Pathで指定していますか?
もし、存在するファイルをちゃんと消そうとしているのであれば
考えられるのは、ファイルが読み取り専用となっている、
ファイルを削除する権限がないなどの
環境的な問題かもしれないですね。
uniqque
常連さん
会議室デビュー日: 2005/03/18
投稿数: 43
投稿日時: 2005-03-18 18:08
このソースではファイル名しか書いてませんが、
実際のコードではクラスパスからのPathを指定してます。
〜〜フォルダ/フォルダ1/削除予定1.txt のような感じです。
exist()で調べるとtrueが返ってきてるみたいです。
最初には書きませんでしたが、たまに削除できる時があるんです。
これが一番の謎です。
削除が成功したり成功しなかったりっていう感じです。
成功したときは削除されてきちんと順番もずれてるんです。
Javawのバグってのも考えられるのでしょうか。
権限についてはまだわかりませんが、ファイルを作成
するときに権限って指定するのでしょうか。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-03-18 20:45
引用:
削除が成功したり成功しなかったりっていう感じです。


なら、他のプロセスがロックしてるとかアクセス権だとか環境が怪しいんでないの。

引用:
実際のコードではクラスパスからのPathを指定してます。


これじゃダメ。相対パスはカレントディレクトリを基準に指定すれ。
uniqque
常連さん
会議室デビュー日: 2005/03/18
投稿数: 43
投稿日時: 2005-03-18 22:09
削除が成功したりしなかったりで、
一応成功はしているのでパスは合ってるようです。
他のプロセスがロックしてるなどどのようにして調べるのでしょうか。
色々やりましたがアクセス権などの環境以外に考えられないみたいです。
canRead()とcanWrite()はともにtrueでした。
uniqque
常連さん
会議室デビュー日: 2005/03/18
投稿数: 43
投稿日時: 2005-03-19 00:18
問題解決しました。
処理を追って行ったのですが、
close()処理を忘れてました・・・
成功したり成功しなかったりっていう理由が分かりました。

スキルアップ/キャリアアップ(JOB@IT)