ファイルの削除ができない

このQ&Aのポイント
  • java.io.Fileのdelete()メソッドを利用してファイルの削除をしたいと思っていますが、削除がうまくできません。
  • ファイルにアクセスしていない場合は削除できるのですが、ファイルを読み込んだ後に削除しようとするとうまくいきません。
  • ファイルにアクセスした後は、関連するオブジェクトを開放する必要がありますが、開放しても削除ができません。
回答を見る
  • ベストアンサー

ファイルの削除が出来ません

java.io.Fileのdelete()メソッドを利用してファイルの削除をしたいと思っています。 一度もアクセスしていないファイルはdelete()メソッドを利用して削除できるのですが、java.io.Readerなどを利用してファイルの読み込みなどを行った後にそのファイルを削除しようとすると削除がうまく出来ません。 ファイルにアクセスするときに利用したReaderや、Fileのオブジェクトは削除する前にnullを代入して開放しているのですが。。。 どなたか回避方法をご存知の方はいらっしゃいませんでしょうか。よろしくお願いいたします。 コード例: File f = new File(dirName, fileName); BufferedReader br = new BufferedReader(new FileReader(f)); ・・・(読み込みの処理)・・・ f=null; br=null; ・・・ File f = new File(dirName, fileName); boolean b = f.delete(); と、上記のように一度アクセスしたファイルを削除しようとすると、削除が出来ず、変数bにはfalseが入ってしまいます。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

リーダーのcloseメソッドを呼び出していますか? 単に変数にnullを代入するだけでは不十分です。closeメソッドで確実にファイルを閉じないといけないと思います。 ところでdeleteメソッドを呼び出す前にFileオブジェクトを作り直す必要は無いと思いますが……

mari_o
質問者

お礼

nullを代入するだけでなく、close()も呼び出したら、削除が出来ました。どうもありがとうございます!!! とても助かりました。(nullの代入なしで、close()メソッドだけでも削除できました。) (Fileオブジェクトを作り直していたのは、もともとのソースでそれぞれ別なメソッドとして書いていたからです。ご指摘どうもありがとうございました。)

関連するQ&A

  • CSVファイルを列ごとに読み込む処理について

    はじめまして。 よろしくお願いいたします。 プログラミングに興味をもち、JAVAに触れている者です。 現在eclipseでCSVファイルを列ごとに読み込んで表示する、というプログラムを作成しているのですが、コンパイルエラーを除去することができません。 エラー内容は 「処理されない例外の型 FileNotFoundException」 です。 これを見る限りでは読み込むファイルがないということらしいのですが、CSVファイルはちゃんと作成し、作成中のプログラムのファイルがあるディレクトリに置いてあります。 原因を探したいのですが、eclipseのこともjavaのこともよくわかっていないため、まるで見当がつきません。 どうかご教示をお願いいただけませんでしょうか? 以下が作成中のプログラムです。 package ioTest; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.FileInputStream; public class IOsample { public static void main (String[] args){ BufferedReader br = null; File csv = new File("sampleCSV.csv"); br = new BufferedReader( new InputStreamReader( new FileInputStream(csv))); while (br.ready()){ System.out.println(br.readLine()); } br.close(); } } レベルの低い質問で申し訳ありませんが、なにとぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • ファイル読み込みLinux対応

    JAVAでLinuxの環境でファイルを読み込む処理を行っているのですが、文字化けして上手く読み込めません。 環境はLinux 下記のfileNameは、新JISのファイル FileInputStream fis = new FileInputStream(fileName); BufferedReader br = new BufferedReader(new InputStreamReader(fis, "ISO2022JP")); とコーディングしてJISの文字コードを指定してファイルを読み込もうとしたのですが、 sun.io.MalformedInputException のエラーがでて しまいます。 最終的にJISコードをUTF8に変換してDBに書き込んでいます。この変換処理は、うまく行っておりますのでJISのファイルがJISコードとして読み込めれば実現できそうな気がすのですが・・・ 何かよい方法があれば教えて頂けませんか?

    • ベストアンサー
    • Java
  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • ファイル出力時の

    以下のソースでファイル出力するのですが、 BufferedReader br = new BufferedReader(new FileReader(new File(args[0]))); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(args[1]))); //一行読み込みを行った文字列を格納 String line; //一行読み込み while((line = br.readLine()) != null){ //一行書き込み pw.write(line); System.out.println(line); } コンソールへの出力は正常に出力されるのですが、 ファイルへの出力は改行されずに一行で出力されてしまいます。 どうすればファイル出力も正常になるか教えてください。

  • Excel マクロで指定したファイルの削除

    いつもお世話になっております。 Excelのマクロで、指定したファイルの削除は可能でしょうか? Workbooks.Delete Filename:=○○○ 以上で出来るかなと思ったのですが、Deleteの部分が コンパイルエラー「メソッド またはデータメンバが見つかりません。」と警告されます。 Deleteを何に変更すればファイルの削除が行なえるのでしょうか? 以上、よろしくお願いいたします。

  • BufferedReaderなどについて

    今JAVAを勉強しているのですが。 少しつまづいてしまいました。 ---------------------------------------------- import java.io.*; class Cat { public static void main(String args[]) throws IOException { File inputFile = new File(args[0]); FileReader in = new FileReader(inputFile); BufferedReader br = new BufferedReader(in); //・・・続く ---------------------------------------------- 上のプログラム全て、といいますか import java.io.*; や BufferedReader のことが特によく分かりません。いろいろサイトや本などを見てみたのですが、それでもいまいち理解できませんでした。どなたか、教えてください、お願い致します

    • ベストアンサー
    • Java
  • ネットワークドライブ先のファイル削除!

    こんにちは! 質問なのですが ネットワークドライブ先のファイルを 削除したいのですが、ネットワークドライブ 先は削除できないのでしょうか? FileクラスのDeleteメソッドを使っています。 もし、経験がございましたら教えてください。 サンプルなどありましたら、見せてほしいのですが。。。 よろしくお願いします。

    • ベストアンサー
    • Java
  • エラー処理について

    ファイルを引数に取って、そのファイルの中身を文字列として返す自作メソッドをウェブで見つけたので、そのまま使用しようと思いました。しかし、ファイルが空ファイルの場合はこのメソッドだとエクセプションエラーになってしまうようです。どこかを変更して、メイン側で適切に処理してあげなければならないと思われるのですが、どこをどう修正すればよいでしょうか。自分で作成したものでもないので、見当がつかない状態です。。申し訳ありませんが宜しくお願いします。 public static String fileToString(File file) throws IOException { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); StringBuffer sb = new StringBuffer(); int c; while((c=br.read())!=-1) { sb.append((char) c); } return sb.toString(); } finally { br.close(); } }

    • ベストアンサー
    • Java
  • javaで大量のファイルを読み込む方法

    javaプログラミングについて質問です。 例えば、a1.txt~a100.txtの100個のテキストファイルがある として、これをループか何かを使って順番に読み込みたいのですが、 そのような方法はあるのでしょうか。 // ファイル入力ストリームを取得 BufferedReader br = new BufferedReader(new FileReader("a1.txt")); BufferedReader br2 = new BufferedReader(new FileReader("a2.txt")); BufferedReader br3 = new BufferedReader(new FileReader("a3.txt")); ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ BufferedReader br100 = new BufferedReader(new FileReader("a100.txt")); という風に書くのが面倒に思っています。 宜しくお願いします。

    • ベストアンサー
    • Java
  • Senを用いてファイルの移動をさせたいんですが・・

    形態素解析システム「Sen」を用いて、テキストの内容を判別してファイルを移動させたいんですが、以下のプログラムでは「Path」という言葉があったら指定ディレクトリに移動するようにしたいんですが、移動しませんでした。エラーも出ていません。A~Bのif文は通過したんですが・・ 何がまずいんでしょうか?? import java.io.File; import net.java.sen.StringTagger; import net.java.sen.Token; import java.io.BufferedReader; import java.io.FileReader; public class samp1 { public static void main(String args[]) { System.setProperty("sen.home", "./"); System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); try { File F = new File("C:/Documents and Settings/デスクトップ/test"); String path = F.getPath(); System.out.println("指定したディレクトリ:" + path); File a[] = F.listFiles(); for( int i=0; i<a.length; i++ ) { if( a[i].isFile() ){ System.out.println(a[i] + "(ファイル)"); FileReader fr = new FileReader(a[i]); BufferedReader br = new BufferedReader(fr); StringTagger tagger = StringTagger.getInstance(); String s; while ((s = br.readLine()) != null) { Token[] token = tagger.analyze(s); if (token != null) {for (int l = 0; l < token.length; l++) { if(token[l].toString().equals("Path")){ //A File file2 = new File( "C:/Documents and Settings/デスクトップ/receive/"+a[i].getName()); boolean ret = a[i].renameTo( file2 ); System.out.println("移動したデイレクトリ:"+file2.getPath()); //B } } } } } } catch (Exception e) { e.printStackTrace();} } }

    • ベストアンサー
    • Java

専門家に質問してみよう