我试图将文件复制到另一个文件中,删除字符串的一部分,如下所示:
文件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中的行
答案 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
。
关于为什么某些行丢失 - 检查程序是否返回异常(或捕获它,不要抛出,因此更容易看到)。我现在看不出原因。