Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个java代码到底在做什么?_Java_String_File Io - Fatal编程技术网

这个java代码到底在做什么?

这个java代码到底在做什么?,java,string,file-io,Java,String,File Io,我正试图编写一个程序,要求我从文件中读取文本。在进行研究时,我发现这段代码正是我所需要的: String string=""; try{ InputStream ips = new FileInputStream("WORDS.txt"); InputStreamReader ipsr = new InputStreamReader(ips); BufferedReader br = new BufferedReader(ipsr);

我正试图编写一个程序,要求我从文件中读取文本。在进行研究时,我发现这段代码正是我所需要的:

String string="";

try{

        InputStream ips = new FileInputStream("WORDS.txt"); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader br = new BufferedReader(ipsr);
        String line;
        while ((line=br.readLine())!=null){
            System.out.println(line);
            string+=line+"\n";
        }
        br.close(); 
    }       
    catch (Exception e){
        System.out.println(e.toString());
    }

有人能解释一下这个代码是如何工作的吗?我是编程新手,对大部分代码都不熟悉。这不是为了家庭作业——这是我为个人利益而写的一个程序。谢谢。

在较高级别上,它逐行读取文件,并构建一个由文件中的字符数据组成的字符串*



*以不必要的低效方式;循环中的字符串连接几乎总是应该用a的用法来代替。

在您了解了程序的功能之后(这一点很重要,对于任何Java程序员来说,这些都是必不可少的概念,希望有人能够补充),下面是我要做的改进:

  • 根本没有这方面的代码。把文件读入字符串的问题已经解决了。使用

  • 不要在循环中使用字符串连接。使用StringBuilder。使用所需容量(如文件大小)的最佳猜测初始化StringBuilder

  • 创建读取器时指定显式字符集。否则,您的程序将无法跨不同的计算机进行移植

  • 不要先删除换行符,然后再添加它们,除非这确实是您想要的。这可能会更改正在读取的数据(如果原始文件使用不同的换行方案)

  • 不要捕获异常并打印它。让它将调用堆栈向上传播到一段可以处理它的代码中

  • 不要将结果字符串初始化为空。如果代码完成,字符串将保存您的数据,否则,您需要null或异常。空字符串只会增加查找错误的难度。最好不要初始化字符串,甚至不要初始化为null。然后,您会在这里得到一个很好的编译错误,要求您显式地指定发生异常时字符串应该是什么

  • 将从文件读取的代码放在其自己的方法中。让它返回一个字符串。稍后对该字符串所做的操作与此方法无关


当您尝试运行它时发生了什么?如果您不知道它的功能,您如何知道此代码正是您需要执行的操作?当我运行它时,它会逐行打印文本文件的内容,这正是我此程序所需的内容。我不明白它是如何工作的。@user2184665开始阅读这段代码中您“不理解”的每个类和方法的类和方法级别的JavaDocs。在调试器中单步执行代码。采取你不理解的方法。阅读Javadocs。没有什么比实际的手上实验更能帮助你学得更快。这是一个很有帮助的建议。我还想补充一点,您可以在Google中搜索每个类,并找到一种称为JavaDoc(通常在docs.oracle.com中)的页面,该页面详细描述了每个类。一次检查一个,直到你理解了每一个。您将很快从权威来源了解到。@phatfingers关于使用Google查找Javadoc的建议+1。这也是我所做的,即使任何合适的IDE都将绑定Javadoc,并且当您将鼠标悬停在方法等上时能够显示它。JDK的文档非常好。找一个方便的方式阅读它。