Java BufferedReader未读取整个文件
代码的目标是逐个字符读取文件,将每个字符转换为小写,并用空格替换非字母。原始文件中有500行,但编辑的文件突然结束Java BufferedReader未读取整个文件,java,bufferedreader,Java,Bufferedreader,代码的目标是逐个字符读取文件,将每个字符转换为小写,并用空格替换非字母。原始文件中有500行,但编辑的文件突然结束 File fileToBeModified = new File(filePath); BufferedReader reader = null; FileWriter writer = null; try { reade
File fileToBeModified = new File(filePath);
BufferedReader reader = null;
FileWriter writer = null;
try
{
reader = new BufferedReader(new FileReader(fileToBeModified));
char single;
String lowercase="";
int a = reader.read();
writer = new FileWriter(fileToBeModified);
while(a!=-1){
single = (char) a;
String s = String.valueOf(single);
if (a>=65 && a<=90 || a>=97 && a<=122)
lowercase = s.replace(s, s.toLowerCase());
else if(s.equals("0")==false && s.equals("1")==false && s.equals("'")==false)
lowercase = s.replace(s, " ");
writer.write(lowercase);
a = reader.read();
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
//Closing the resources
reader.close();
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
文件可能包含不同类型的字符。要读取此字符,有时BufferedReader.reader()可能会引发异常。我尝试使用您的输入格式执行您的代码。但那次没有任何问题,它执行了。所以我的建议是在读取和写入文件时使用额外的try-catch块。此外,字符串操作的成本非常高,而且内存效率不高。我修改了你的代码并在这里分享,希望对你有所帮助
String filePath = "hello.txt";
File fileToBeModified = new File(filePath);
System.out.println(fileToBeModified.exists());
BufferedReader reader = null;
FileWriter writer = null;
try {
reader = new BufferedReader(new FileReader(fileToBeModified));
char single;
//String lowercase = "";
char lowercase = ' ';
int a = reader.read();
writer = new FileWriter(fileToBeModified);
while (a != -1) {
single = (char) a;
//String s = String.valueOf(single);
if (a >= 65 && a <= 90 || a >= 97 && a <= 122)
lowercase = Character.toLowerCase(single);//s.replace(s, s.toLowerCase());
//else if (s.equals("0") == false && s.equals("1") == false && s.equals("'") == false)
else if(single != '0'&& single != '1' && single != '\'' )
lowercase = ' ';
//additional try-catch block
try {
writer.write(lowercase);
a = reader.read();
}catch(Exception ex) {
ex.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// Closing the resources
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String filePath=“hello.txt”;
File fileToBeModified=新文件(filePath);
System.out.println(fileToBeModified.exists());
BufferedReader reader=null;
FileWriter=null;
试一试{
reader=new BufferedReader(new FileReader(fileToBeModified));
单焦;
//字符串小写=”;
字符小写=“”;
int a=reader.read();
writer=新文件编写器(filetoemodified);
而(a!=-1){
单=(字符)a;
//字符串s=字符串.valueOf(单个);
如果(a>=65&&a=97&&a文件可能包含不同类型的字符。要读取此字符,有时需要BufferedReader.reader()可能会引发异常。我尝试使用您的输入格式执行您的代码。但那一次执行时没有任何问题。因此,我的建议是在读取和写入文件时使用额外的try-catch块。此外,字符串操作非常昂贵,而且内存效率不高。我修改了您的代码并在此处共享,希望对您有所帮助你
String filePath = "hello.txt";
File fileToBeModified = new File(filePath);
System.out.println(fileToBeModified.exists());
BufferedReader reader = null;
FileWriter writer = null;
try {
reader = new BufferedReader(new FileReader(fileToBeModified));
char single;
//String lowercase = "";
char lowercase = ' ';
int a = reader.read();
writer = new FileWriter(fileToBeModified);
while (a != -1) {
single = (char) a;
//String s = String.valueOf(single);
if (a >= 65 && a <= 90 || a >= 97 && a <= 122)
lowercase = Character.toLowerCase(single);//s.replace(s, s.toLowerCase());
//else if (s.equals("0") == false && s.equals("1") == false && s.equals("'") == false)
else if(single != '0'&& single != '1' && single != '\'' )
lowercase = ' ';
//additional try-catch block
try {
writer.write(lowercase);
a = reader.read();
}catch(Exception ex) {
ex.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// Closing the resources
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String filePath=“hello.txt”;
File fileToBeModified=新文件(filePath);
System.out.println(fileToBeModified.exists());
BufferedReader reader=null;
FileWriter=null;
试一试{
reader=new BufferedReader(new FileReader(fileToBeModified));
单焦;
//字符串小写=”;
字符小写=“”;
int a=reader.read();
writer=新文件编写器(filetoemodified);
而(a!=-1){
单=(字符)a;
//字符串s=字符串.valueOf(单个);
如果(a>=65&&a=97&&a我已尝试利用Java8
、stream
和正则表达式来简化解决方案
readAllLines
:此方法读取文件中的所有行。使用UTF-8字符集将文件中的字节解码为字符。有关详细信息,请参阅文档
注意:您可以根据您的需求/用例进一步更改正则表达式
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class FileRead
{
public static void main(String[] args) throws IOException {
generateArrayListFromFile("lines.txt");
}
public static ArrayList<String> generateArrayListFromFile(String filename) throws IOException {
List<String> result = Files.readAllLines(Paths.get(filename));
result.stream().map(String::toLowerCase).collect(Collectors.toList());
List<String> withoutNumbers = new ArrayList<>();
for (String s : result) {
withoutNumbers.add(s.replaceAll("\\d", ""));
}
System.out.println(withoutNumbers);
return (ArrayList<String>) withoutNumbers;
}
}
import java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.path;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.stream.collector;
公共类文件读取
{
公共静态void main(字符串[]args)引发IOException{
generateArrayListFromFile(“lines.txt”);
}
公共静态ArrayList GeneratorArrayListFromFile(字符串文件名)引发IOException{
列表结果=Files.readAllLines(path.get(filename));
result.stream();
列表不带编号=新建ArrayList();
for(字符串s:结果){
不带数字。添加(s.replaceAll(\\d“,”);
}
System.out.println(不带编号);
返回(ArrayList),不带编号;
}
}
我尝试利用Java8
、stream
和正则表达式来简化解决方案
readAllLines
:此方法读取文件中的所有行。使用UTF-8字符集将文件中的字节解码为字符。有关详细信息,请参阅文档
注意:您可以根据您的需求/用例进一步更改正则表达式
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class FileRead
{
public static void main(String[] args) throws IOException {
generateArrayListFromFile("lines.txt");
}
public static ArrayList<String> generateArrayListFromFile(String filename) throws IOException {
List<String> result = Files.readAllLines(Paths.get(filename));
result.stream().map(String::toLowerCase).collect(Collectors.toList());
List<String> withoutNumbers = new ArrayList<>();
for (String s : result) {
withoutNumbers.add(s.replaceAll("\\d", ""));
}
System.out.println(withoutNumbers);
return (ArrayList<String>) withoutNumbers;
}
}
import java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.path;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.stream.collector;
公共类文件读取
{
公共静态void main(字符串[]args)引发IOException{
generateArrayListFromFile(“lines.txt”);
}
公共静态ArrayList GeneratorArrayListFromFile(字符串文件名)引发IOException{
列表结果=Files.readAllLines(path.get(filename));
result.stream();
列表不带编号=新建ArrayList();
for(字符串s:结果){
不带数字。添加(s.replaceAll(\\d“,”);
}
System.out.println(不带编号);
返回(ArrayList),不带编号;
}
}
使用do while循环并将读取的内容放入循环中尝试过了,仍然不起作用。您可以共享您的输入文件吗?并且您可以在while循环中添加另一个try catch块。我已编辑了该问题以共享输入文件的一部分。谢谢@Neeraja。我尝试解决您的一些问题。编写一个粗略的答案,并进行一些改进。如果您找到此答案有帮助,然后向上投票并批准它。使用do while loop并将读取放入loop中尝试过它,仍然无效。您可以共享您的输入文件吗?并且您可以在while loop中添加另一个try catch块。我已编辑了该问题以共享输入文件的一部分。谢谢@Neeraja。我尝试解决您的一些问题。写一个粗略的答案,并进行一些改进如果你觉得这个答案有帮助,那么投票并批准它。