Java BufferedReader未读取整个文件

Java BufferedReader未读取整个文件,java,bufferedreader,Java,Bufferedreader,代码的目标是逐个字符读取文件,将每个字符转换为小写,并用空格替换非字母。原始文件中有500行,但编辑的文件突然结束 File fileToBeModified = new File(filePath); BufferedReader reader = null; FileWriter writer = null; try { reade

代码的目标是逐个字符读取文件,将每个字符转换为小写,并用空格替换非字母。原始文件中有500行,但编辑的文件突然结束

        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。我尝试解决您的一些问题。写一个粗略的答案,并进行一些改进如果你觉得这个答案有帮助,那么投票并批准它。