• 编程检查d: est.txt文件是否存在,若在则显示该文件的名称和内容。


    下面放两种方法

    老师写的:

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 
     5 //1、编程检查d:	est.txt文件是否存在,若在则显示该文件的名称和内容。
     6 //老师写的,可以读取汉字
     7 
     8 public class SY61 {
     9     public static void main(String[] args) throws Exception {
    10         File f= new File("d:\test.txt");
    11         if(f.exists()){
    12             System.out.println("文件存在 " + f.getAbsolutePath() );//显示文件路径
    13             FileInputStream fis = new FileInputStream(f);
    14             byte[] b = new byte[1024];//以字节数组存放
    15             int len = 0;
    16             while(( len = fis.read(b)) != -1 ){
    17                 System.out.println(new String(b,0,len));
    18             }
    19             fis.close();
    20             
    21         }
    22         else
    23         {
    24             System.out.println("文件不存在");
    25         }
    26     }
    27 
    28 }

    这种可以读取汉字.下面是我自己写的,不能读取汉字,原本该是汉字的地方是问号.

     1 /*编程检查C:WINDOWSsetuplog.txt文件是否存在,
     2  * 若在则显示该文件的名称和内容。*/
     3 //自己写的,读取不了汉字
     4 import java.io.File;
     5 import java.io.FileInputStream;
     6 
     7 public class Test6_1 {
     8 public static void main(String[] args) throws Exception{
     9     FileInputStream fin=null;
    10     int c=0;
    11     File f=new File("d:\test4.txt");
    12     if(f.exists()){
    13         System.out.println("文件存在");
    14         fin=new FileInputStream(f);
    15         c=fin.read();
    16         while(c!=-1){
    17             System.out.print((char)c);
    18             c=fin.read();
    19         }
    20         System.out.println();
    21         System.out.println("File name:"+f.getName());
    22     }
    23     else
    24         System.out.println("文件不存在");
    25     fin.close();
    26 }
    27 }

    那么问题来了,FileInputStream的read(byte[])和read()方法有什么异同??

    read(byte[])返回的是一个整型的数,当到文件的尾时候返回-1,也就是说read一次读取的字节数为字节数组的长度。

    read()方法一次读取一个字节并返回 那返回类型不应该是byte吗 为什么是int呢??

    输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。

    此处粘贴一位大神的回答:

    如果因为已经到达流末尾而没有可用的字节,则返回值 -1。我们需要使用一个不可能在数据中出现的值来表示流末尾, Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现,如果返回byte, 同样无法表示流末尾., byte的取值范围是从-128到127,这个范围内所有的数据, 都有可能在数据中出现,read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复,read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数,这时就可以用-1表示流末尾了,而改变后的数据只要强转回byte, 就可以得到原有数据。也就是说把一个字节的数据和java中的byte类型的数据混淆了。

  • 相关阅读:
    (笔试题)关于C++的虚函数和多态性
    (笔试题)只用逻辑运算实现乘法运算
    (笔试题)只用逻辑运算实现加法运算
    (C++)浅谈多态基类析构函数声明为虚函数
    (C++)C++多态性中的静态绑定和动态绑定
    (C++)C++类继承中的构造函数和析构函数
    (C++)浅谈using namespace std
    (笔试题)不用除法操作符,实现两个整数的除法
    (笔试题)不用除法操作符,实现两个正整数的除法
    当你学会专注,人生才算真正成熟
  • 原文地址:https://www.cnblogs.com/silenTJ/p/8011894.html
Copyright © 2020-2023  润新知