使用java限制在文件中写入?

时间:2014-06-04 10:18:06

标签: java file

我试图将文件复制到另一个文件中,删除字符串的一部分,如下所示:

文件1:

Name = David  
Age = 21  
M/F = M

要归档2:

David  
21  
M

但是文件1有963行,它只复制了524行。

java是否会从文件中写入(或读取)?

我做了什么来复制它,是不是很糟糕?

    package replace.strings;

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


public class ReplaceStrings {

    public static void main(String[] args){
        ReplaceStrings rs = new ReplaceStrings();
        try{    
        BufferedWriter bw = new BufferedWriter(new FileWriter(new File("C:/tarducciones/traducciones.txt"), true));
        Scanner sc = new Scanner(new File("C:/tarducciones/texto.txt"));
            while(sc.hasNext()){                
            String line = sc.nextLine();    
            line = rs.replace(line);            
            bw.write(line);
            bw.newLine();    

            }    
        bw.close();   
        } catch(IOException ioe){
            System.out.println(ioe);
            }
    }

    public String replace(String a){

        int startIndex = a.indexOf("=");
            if (startIndex>0){
            String toBeReplaced = a.substring(0, startIndex+1);
            String resultado = a.replace(toBeReplaced, "");
            return resultado;}
        else return a;
    }
}
编辑:我把bw放在循环外面但仍然无法正常工作 编辑2:改变你的建议,但仍然没有工作,没有一个例外被捕获 编辑3:我删除了前524条数据线,看看问题是文件中的数据,也没有复制任何行。这可能是数据的问题???它只是txt中的行

4 个答案:

答案 0 :(得分:1)

修改您的编写代码,例如:

    BufferedWriter bw = new BufferedWriter(new FileWriter(new File("C:/tarducciones/traducciones.txt"), true));
    while(sc.hasNext()){
        String line = sc.nextLine();
        // Avoiding creation of new String object.
        bw.write(rs.replace(line));
        bw.newLine();        
    } 
    bw.close(); 

答案 1 :(得分:1)

要将内容写入文件,您应该在while循环之外关闭BufferedWriter,如其他答案所述。但是,我建议使用Java-8。使用Java-8,您可以使用List#replaceAll方法更轻松地完成此操作。看看下面的代码。

BufferedReader br = new BufferedReader(new FileReader("input.txt"));
File output=new File("output.txt");

Stream<String> lines=br.lines();
List<String> lineList=lines.collect(Collectors.toList());
lineList.replaceAll(s->s.substring(s.indexOf('=')+1));

PrintWriter pw=new PrintWriter(output);
lineList.forEach(s-> pw.write(s+"\n"));
pw.close();

答案 2 :(得分:1)

这应该有效

package replace.strings;

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


public class ReplaceStrings {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        ReplaceStrings rs = new ReplaceStrings();
        BufferedWriter bw = new BufferedWriter(new FileWriter(new File("C:/tarducciones/traducciones.txt"), true));
        Scanner sc = new Scanner(new File("C:/tarducciones/texto.txt"));
        while(sc.hasNext()){
            String line = sc.nextLine();    
            String nueva = rs.replace(line);
            bw.write(nueva);
            bw.newLine();
        }
        bw.close();
    }

    public String replace(String a){
        String str = a;
        int startIndex = a.indexOf("=");
        if (startIndex>0){
            String toBeReplaced = str.substring(0, startIndex+1);
            String resultado = str.replace(toBeReplaced, "");
            return resultado;
        }
        else return str;
    }
}

答案 3 :(得分:0)

几点调整:
a)不要在循环内关闭和打开编写器bw - 在每次迭代时关闭/打开它是很低效的(耗时)。
b)你不想在这里处理临时字符串:String str = a;处理原始字符串会更有效和正确 c)这里类似:String nueva = rs.replace(line);你不需要新的String。将结果分配给旧line

关于为什么某些行丢失 - 检查程序是否返回异常(或捕获它,不要抛出,因此更容易看到)。我现在看不出原因。