2016-01-09 4 views
4

Я написал этот фрагмент кода, и он должен заменить все символы в файле с именем «abc.txt» звездочками. Но когда я запускаю этот код, он просто стирает все в файле. Пожалуйста, помогите мне выяснить, что здесь не так. СпасибоПочему этот кусок кода не работает?

import java.io.*; 
import java.util.*; 

class Virus{ 

    public static void main(String[] args) throws Exception{ 

     File f = new File("abc.txt"); 
     FileReader fr = new FileReader(f); 
     FileWriter fw = new FileWriter(f); 
     int count = 0; 
     while(fr.read()!=-1){ 
      count++; 
     } 
     while(count-->0){ 
      fw.write('*'); 
     } 
     fw.flush();  
     fr.close(); 
     fw.close(); 
    } 
} 

ответ

5

Вы должны создать считыватель и запись файлов в последовательности, а не сразу.

FileReader fr = new FileReader(f); 
FileWriter fw = new FileWriter(f); // here you are deleting your file content before you had chance to read from it 

Вы должны сделать следующее:

public static void main(String[] args) throws Exception{ 

    File f = new File("abc.txt"); 
    FileReader fr = new FileReader(f); 
    int count = 0; 
    while(fr.read()!=-1){ 
     count++; 
    } 
    fr.close(); 

    FileWriter fw = new FileWriter(f); 
    while(count-->0){ 
     fw.write('*'); 
    } 
    fw.flush();  
    fw.close(); 
} 
+0

Но сэр Я не понимаю, почему создание FileWriter удаляет содержимое? :/ –

+1

Это режим по умолчанию для открытия файла, усекающий файл, если он существует. – UtsavShah

+2

Поскольку FileWriter очищает файл, если файл уже существует, подготовка файла для записи содержимого. Существует еще один конструктор, который сообщает FileWriter открыть файл для добавления. –

4

Прежде всего, необходимо при чтении файла, а затем закрыть объект файла. Затем начните записывать содержимое в него.

По умолчанию он открывает файл в режиме записи. Все данные теряются, прежде чем вы что-то читаете.

class Virus{ 

    public static void main(String[] args) throws Exception{ 

    File f = new File("/Users/abafna/coding/src/abc.txt"); 
    FileReader fr = new FileReader(f); 
    int count = 0; 
    while(fr.read()!=-1){ 
     count++; 
    } 
    fr.close(); 
    System.out.println(count); 
    FileWriter fw = new FileWriter(f); 
    while(count-->0){ 
     fw.write('*'); 
    } 
    fw.flush(); 
    fw.close(); 
    } 
} 
1
Using FileWriter fw = new FileWriter(f); 

Это очищает содержимое файла. Это потому, что конструктор FileWriter, который вы используете, обрезает файл, если он уже существует.

Если вы хотите добавить данные используйте:

new FileWriter(theFile, true); 
1

Как другие сказали, что вы форматируете файл при создании FileWriter, но нет также никаких оснований для Вас, чтобы прочитать файл в любом случае.

public static void main(String[] args) throws Exception { 
    File f = new File("abc.txt"); 
    long length = f.length(); //length of file. no need to read it. 
    OutputStream out = new BufferedOutputStream(new FileOutputStream(f)); 
    for (int i = 0; i < length; i++) { 
     out.write('*'); 
    } 
    out.close(); 
} 
Смежные вопросы