2016-09-12 9 views
0

対応するリーダーとライターを閉じた後でもファイルを削除できません。 権限(ファイル file.delete上に存在している)何かを残している、何が起こっているかについての私の推測あなたはFileInputStreamを閉じますが、オープンBufferedReaderを残すことである操作後にファイルを削除できません

main(){ 
     try{ 
     File file=new File(path);// Path where the file is present 
     FileReader reader = new FileReader(path); 
     BufferedReader br = new BufferedReader(reader); 
     FileWriter writer = new FileWriter(pathOther); 
     BufferedWriter wr = new BufferedWriter(writer); 
     // Readers and writers for i/o operations 
     while((String str=br.readLine())!=null){ 
     wr.write(str);     // Copying to another file 
     } 
     }catch(Exception e){} 
     finally{ 
     reader.close(); //close reader 

     writer.close(); //close writer 
     file.delete(); //This returns false 

} 
+0

あなたは 'file.exists(呼び出す場合どうなりますか) 'あなたが削除する直前? –

+0

テキストの読み取りにDataInputStreamを使用しないでください。 'BufferedReader br = new BufferedReader(new FileReader(path))'を使用する方がずっと簡単です。 –

+1

BufferedReaderオブジェクトの初期化ステートメントは、 'BufferedReader br = new BufferedReader(new InputStreamReader(new DataInputStream(new FileInputStream(new File(path)))))'という形式をとります。 'DataInputStream d = new DataInputStream(new FileInputStream(new File(path)));'だけです。 – progyammer

答えて

2

偽 私のコードを返します。ファイルハンドルを保持します。その後、ファイルを削除しようとすると、何か他のハンドルがあるため、falseを返します。

次のコードを試してみてください。更新

File file = new File(path); 
try { 
    br = new BufferedReader(new FileReader(file)); 

    // use the reader ... 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     if (br != null) br.close(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

// now close the file 
file.delete(); 

を:上記のコードをテストしながら

私はまた、あなたが見ていた観測を引き起こす可能性が他の何かに気づきました。 pathのファイルが存在しない場合、論理的にfile.deleteを呼び出すこともこの理由で失敗します。したがって、削除しようとする前にファイルが実際に存在することを確認する必要があります。これを確認するにはfile.exists()に電話することができます。

+0

これは今でも閉鎖されていません – arya

+1

@arya 'path'にあるファイルは既に存在しますか?そうでない場合は、削除することはできません。 –

0

まず、あなたの代わりにBufferedReaderを閉じる必要がありますFileReaderBufferedReaderFileReaderのターンコールclose()になります):

ので、代わりの:

reader.close(); //close reader 

の操作を行います。

br.close(); 

(完全な冗長コメントを省略してください)。また

File.delete()は、単にブールを返し、それが失敗した理由あなたを教えてくれない、あなたが代わりにFiles.deleteを呼び出すことによって、より多くの情報を得ることができるので:

try { 
    Files.delete(file.toPath()); 
} catch (IOException e) { 
    // e now contains information about why it can't delete. 
} 
関連する問題