在Java中检查文件中的特定字符串
我试图让我的应用程序读取文本文件并查找字符串。如果该字符串不存在,则使用println生成该字符串。我唯一的问题是它似乎无法读取文本文件。到目前为止,我得到的是:在Java中检查文件中的特定字符串,java,file,text,Java,File,Text,我试图让我的应用程序读取文本文件并查找字符串。如果该字符串不存在,则使用println生成该字符串。我唯一的问题是它似乎无法读取文本文件。到目前为止,我得到的是: PrintWriter itemwriter = new PrintWriter(new FileOutputStream(items)); FileInputStream fstream = new FileInputStream(items); DataInputStream in = new DataInputStream(fs
PrintWriter itemwriter = new PrintWriter(new FileOutputStream(items));
FileInputStream fstream = new FileInputStream(items);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
if (strLine.contains(name)) {
//do nothing, the item already is in the database.
} else {
itemwriter.println(name);
}
但这似乎不起作用。有什么建议吗?您试图同时读取和写入同一文件。虽然可能有办法让它发挥作用,但这将是一个棘手的问题 我建议您读取文件A并写入文件B—如果您想有效地替换输入文件,那么您可以在最后执行一系列移动和删除操作 其他一些建议:
- 您应该使用try/finally块在最后关闭输入和输出
- 您不需要使用
——您没有使用其中的任何内容。直接包装输入流即可数据输入流
- 我建议您显式地为输入和输出指定编码,而不是信任默认编码。(我希望
和FileWriter
在其构造函数中接受编码。)FileReader
- 使用
(或类似的工具)比使用OutputStreamWriter
更可靠-目前,您在编写时不会检测到任何错误PrintWriter
// Ideally have this as a constant somewhere.
Charset utf8 = Charset.forName("UTF-8");
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(inputFile), utf8);
try {
try {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outputFile), utf8);
String line;
while ((line = reader.readLine()) != null) {
if (!line.contains(name)) {
writer.write(line);
writer.newLine();
}
}
} finally {
writer.close();
}
} finally {
reader.close();
}
// Now if you want to shift files around, do it here
遗憾的是,Java对try/finally块的处理如此精细。哦,对于C#的
使用
语句…首先,你不应该使用流。使用文件读取器和文件写入器
如果您需要更多帮助,请发布您的演示问题的帖子 他已经在使用读卡器和写卡器——它们只是围绕着文件流,这是完全合理的。在我看来,应该明确指定编码,但这是一个稍有不同的问题。
FileReader
和FileWriter
选择默认的字符集。更好的解释是,它指向使用流和转换器(InputStreamReader
和OutputStreamWriter
。他已经发布了运行的代码。(您必须附加4行,其中两行是}
)看起来我真的不懂编码。我同意如果你的程序是唯一一个创建和读取文件的程序,那么你完全可以控制编码。但是你怎么知道文件是如何创建的呢?可能是在Word、记事本或其他编辑器中创建的。这些程序不使用操作系统的默认编码吗如果你不使用默认编码,我必须再次承认,我只在一个操作系统上工作过,无论是通过电子邮件发送的、下载的还是通过上述任何方法创建的,我在阅读任何文本文件时都没有遇到过问题。我使用的文本文件是在记事本中创建的,如果这对你有帮助的话。我认为他们使用的是system的默认编码。