JAVAIO-FileInputStream

java.io.FileInputStream是InputStream的具体实现,提供具体文件的输入流

  public class FileInputStream extends InputStream

FileInputStream 实现了InputStream的常用方法

  public int read() throws IOException
  public int read(byte[] data) throws IOException
  public int read(byte[] data, int offset, int length) throws IOException
  public native long skip(long n) throws IOException
  public native int available() throws IOException
  public native void close() throws IOException

这些方法都是Java Native Code,除了read方法,但这些方法还是把参数传给了native方法。所以实际上,这些方法都是Native方法。
FileInputStream有三种构造方法,区别在于文件是如何指定的:

  public FileInputStream(String fileName) throws IOException
  public FileInputStream(File file) throws FileNotFoundException
  public FileInputStream(FileDescriptor fdObj)

第一个构造函数使用文件的名称,文件的名称跟平台相关,所以硬编码文件名不是一个好的方案,相比之下,后两个就要好很多。
读取文件,我们只需要把文件名称传递给构造函数。然后像平常那样调用read方法即可。

  FileInputStream fis = new FileInputStream("README.TXT");
  int n;
  while ((n=fis.available())>0) {
    byte[] b = new byte[n];
    int result = fis.read(b);
    if( result == -1) break;
    String s = new String(b);
    System.out.print(s);
   }

Java在当前的工作路径寻找文件,通常来说,就是你键入java programName时的路径。在FileInputStream的构造函数中传入相对路径和绝对路径都是可行的。
如果你试图打开一个并不存在的文件,就会抛出FileNotFoundException。如果因为其他原因无法写入(比如权限不足)其他类型的异常会被抛出。下面是一个通过控制台获取文件名,然后把文件打印到控制台的例子

public class FileTyper {
  public static void main(String[] args) {
    if(args.length==0) {
      System.err.println("no file is determined");
      return;
    }
    for (int i=0;i<args.length;i++) {
      try{
        typeFile(args[i]);
        if(i+1<args.length) {
          System.out.println();
          System.out.println("--------");
        }
       } catch (IOException e) {System.err.println(e);} 
     }
  }
  public static void typeFile(String filename) throws IOException {
    FileInputStream fin = new FileInputStream(filename);
    StreamCopier.copy(fin,System.out);
    fin.close();
  }
}

如果需要的话,你也可以对同一个文件同时打开多个流。每一个流维护一个单独的指针,指向文件中的当前位置。读取文件并不会更改文件,如果是写文件的话,那就是另一回事了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,174评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,573评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,951评论 0 62
  • 莫素柔停止了誇張的喊叫,用手竪在嘴邊沖上官紫煙使眼色,瘀青的左眼睛烏雞眼一般,右眼上下眼皮瞬間擠在一起,一根根細碎...
    林素兮阅读 1,319评论 3 6
  • “许一然,你这个混蛋!”多年后再回忆没想到和欧阳雪漫的相识听到的第一句话便是这么莫名其妙的一句。 完全被弄懵的我,...
    郭青年阅读 3,907评论 0 1

友情链接更多精彩内容