【问题标题】:Why we don't need i++ in File Operation in java?为什么我们在 java 的文件操作中不需要 i++?
【发布时间】:2015-12-31 09:42:31
【问题描述】:

为什么我们在下面的 sn-p 中不需要i++

import java.io.*;
    class PracIn
    {
        public static void main(String args[])
        {
            try
            {
            System.out.println("Reading From File.....\n\n");

            /* You MUST create First File myOwnFile.txt in your machine */
            /* Add some Text on that File */

            FileInputStream fin=new FileInputStream("myOwnFile.txt");   

            int i=0;

            while((i=fin.read())!=-1)
            {
                System.out.print((char)i);      /* why we don't need i++*/
            }
            }
            catch(Exception e)
            {
            }
        }
    }

逻辑背后的理论是什么?

【问题讨论】:

  • fin.read() 从文件中获取下一个字节。因为,它到达结束,它将返回 -1,因为它没有任何要读取的内容,即检查文件结尾的条件并且循环终止

标签: java file core


【解决方案1】:

i 在这里不是循环索引,所以不需要增加它。 i 分配给从文件中读取的每个字节。

【讨论】:

  • 感谢您的回复先生!那么如何获取下一个字节?
  • @NikhilPatil 每次调用 fin.read() 都会获取下一个字节。
【解决方案2】:

read() 方法基本上返回“数据的下一个字节,如果到达文件末尾,则返回 -1”并将其分配给 i。 while 循环正在检查 i 的值作为条件语句。这就是为什么我们不需要增加 i 的值(i 的值取决于 FileInputStream 的 read() 函数的返回值)。一旦条件为真,循环将结束;这意味着 i 的值将是 -1(到达文件末尾)。

有关详细说明,请通过以下链接。在这里您可以找到 read() 方法的详细信息。希望这能回答您的问题。

https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html

【讨论】:

    【解决方案3】:

    这是我用来从文件中读取行并将其存储在字符串数组中的代码 sn-p,希望这对你有用:)

    public class user {
     public static void main(String x[]) throws IOException{
      BufferedReader b=new BufferedReader(new FileReader("<path to file>"));
      String[] user=new String[30];
      String line="";
      while ((line = b.readLine()) != null) {
       user[i]=line; 
       System.out.println(user[1]);
       i++;  
       }
    
     }
    }
    

    【讨论】:

      【解决方案4】:

      为什么你认为你需要做i++

      int i;
      i=fin.read();
      

      在这里,您一次读取一个字符。此外,它不像文件中的指针,每次读取字符时都需要递增。 read() 方法读取字符并返回它。当它遇到文件末尾时,它将返回-1。因为在读取每个字符的时候都是由它们的 ASCII 值返回的,所以需要转换回char 并打印出来。


      这是FileInputStream 类中read() 方法的实现。它使用本机实现从文件中读取字节。

      public int read() throws IOException {
          return read0();
      }
      
      private native int read0() throws IOException;
      

      进一步阅读原生read():native read()

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2020-09-21
        • 2019-06-09
        • 2017-10-16
        • 1970-01-01
        相关资源
        最近更新 更多