`
only_java
  • 浏览: 109756 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于java io文件操作类的笔记

    博客分类:
  • j2se
阅读更多
JAVA 中的IO流
1.首先得搞清楚流的概念:
   一个流,它有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。因此我们可以把流分两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。

两个概念:
结点流(node stream)
      特点:直接从指定的位置(如磁盘文件或内存区域)读或写
过滤器(filters)
      除结点流之外的流都是过滤器
       特点:往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似。

我们知道,io里面那些大大小小的关于文件操作的类很多,而且需要传入的参数可能是物理文件,也可能是某个对象。搞清上面两个概念后我们就能很清楚的知道在new一个文件类时该传什么样的参数。下面介绍流的另外一种分类,它是基于操作对象的类型分的。

流分类:
1.Java的字节流
   InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
2.Java的字符流
  Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new

JAVA字节流

     FileInputStream和FileOutputStream
      这两个类属于结点流,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。如:
       FileInputStream infile = new FileInputStream("myfile.dat");
      FileOutputStream outfile = new FileOutputStream("results.dat");

      要注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。

      BufferedInputStream和BufferedOutputStream
      它们是过滤器流,其作用是提高输入输出的效率。
       DataInputStream和DataOutputStream
      这两个类创建的对象分别被称为数据输入流和数据输出流。这是很有用的两个流,它们允许程序按与机器无关的风格读写Java数据。所以比较适合于网络上的数据传输。这两个流也是过滤器流,常以其它流如InputStream或OutputStream作为它们的输入或输出。

Java的字符流 

    字符流主要是用来处理字符的。Java采用16位的Unicode来表示字符串和字符,对应的字符流按输入和输出分别称为readers和writers。

    两种不现导向的stream之间的转换
      InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream
      例如:
      
BufferedReader in
   = new BufferedReader(new InputStreamReader(System.in));
      
  
   BufferedReader和BufferedWriter
    这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理。
import java.io.*;
public class Echo {
  public static void main(String[] args) {
    BufferedReader in =
      new BufferedReader(
        new InputStreamReader(System.in));
    String s;
    try {
      while((s = in.readLine()).length() != 0)
        System.out.println(s);
      // An empty line terminates the program
    } catch(IOException e) {
      e.printStackTrace();
    }
  }
} 

该程序接受键盘输入并回显。
对BufferedReader类,该类的readLine()方法能一次从流中读入一行,但对于BufferedWriter类,就没有一次写一行的方法,所以若要向流中一次写一行,可用PrintWriter类将原来的流改造成新的打印流,PrintWriter类有一个方法println(),能一次输出一行。如:
............
PrintWriter out = new PrintWriter(new BufferedWriter(
      new FileWriter("D:\javacode\test.txt")));
out.println("Hello World!");
out.close();
............




相关示例:


1,与控制台相关。的读入/写出。 实现了字符串的复制。
import java.io.*;
public class TextRead{

public static void main(String[] args){
   BufferedReader bf = null;/*BufferedReader相当于一个大桶,其实就是内存,这里实现了大量大量的读写 ,而不是读一个字节或字符就直接写如硬盘,加强了对硬盘的保护。*/
   try{
    while(true){ // while(true){}循环保证程序不会结束
    
       bf = new BufferedReader(new InputStreamReader(System.in));
       /*System.in 为标准输入,System.out为标准输出*/
       /*InputStreamReader用语将字节流到字符流的转化,这也就是处理流了
        *在这里相当与2个管道接在System.in与程序之间。
        *readLine()方法功能比较好用,也就通过处理流来实现更好功能。
        **/
     String line = bf.readLine();
     System.out.println(line);
    }  
   }catch(Exception e){
    e.printStackTrace();
   }finally{
    //一定要关闭流,用完后。最好放在

filally 里面。  
    try{   
     if(bf!=null){
      bf.close();
     }
    }catch(Exception e){
       e.printStackTrace();
    }
    
   }
   
}

}


2,与文件 相关的 读写。    实现了文件的复制。

import java.io.*;
public class TextRead{

public static void main(String[] args){
   File fin,fout;  
   BufferedReader bf = null;
   PrintWriter pw = null;
   try{
    fin = new File("zzc.txt"); //注意文件与程序都要在同一个文件夹下。zzc.txt为要被复制的文件。
   
    fout = new File("copyzzc.txt"); //如果没有会自动创建。
   
    bf = new BufferedReader(new FileReader(fin));
   
      pw = new PrintWriter(fout); //PrintWriter为打印流,也可以使用BufferedWriter.
    String line = bf.readLine();
    while(line!=null){
     pw.println(line);
    
     line = bf.readLine();
    }
   
   
   }catch(Exception e){
    e.printStackTrace();
   
   }finally{
    try{
    //关闭 文件。
     if(bf!=null){
      bf.close();
      bf = null;
     }
     if(pw!=null){
      pw.close();
      pw = null;
     }
    }catch(Exception e){
     e.printStackTrace();
    }
   }
   
}

}


下面是io类的结构图:
  • 大小: 138.2 KB
  • 大小: 124.5 KB
分享到:
评论

相关推荐

    Java文本文件操作程序-写笔记软件.rar

    Java文本文件操作程序-写笔记软件,里面有比较多的文本操作函数,比如变形的构造函数,把File对象也放该函数内,以使引用FileIO对象的类更整洁,设置自动换行,自动换行则不会出现横向的滚动条,判断当前的状态是不是...

    java-io-file类笔记

    尽管java.io定义的大多数类是实行流式操作的,File类不是。它直接处理文件和文件系统。也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的...

    Java开发详解.zip

    031210_〖第12章:JAVA IO〗_IO操作实例笔记.pdf 031211_【第12章:JAVA IO】_Scanner笔记.pdf 031212_【第12章:JAVA IO】_数据操作流笔记.pdf 031213_【第12章:JAVA IO】_合并流笔记.pdf 031214_【第12章:JAVA ...

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...

    IO操作.pdf

    一本清华大写java IO课程书。详细介绍了java IO操作的各个类,可以一睹高级学府的老师是如何讲述java IO的。

    java IO流学习笔记——(1)文件字节流

    java IO流学习笔记——(1) IO流总述 • 输入流:数据源到程序(InputStream、Reader读进来) • 输出流:程序到目的地(OutputStream、Writer写出去) 流分类 : • 节点流:可以直接从数据源或目的地读写数据 • 处理...

    Java_IO操作总结

    详解Java I/O相关知识点.学习Java语言IO的数据流概念,讲述了每个类的具体应用范围,IO基本概念,输入输出流的处理,并且给出众多的实例代码。 。

    Java笔记编辑查看器源代码

    把File对象也放该函数内,以使引用FileIO对象的类更整洁,因为每次文件目录树收起时也触发valueChanged函数,所以此处加if判断是否是收起操作。该判断条件来源与打印((JTree) e.getSource()).getSelectionPath()调试...

    狂神说上课笔记未删减 Java基础到技术升级

    1、JavaSE:Java入门 2、JavaSE:基础语法 3、JavaSE:流程控制 4、JavaSE:方法 5、JavaSE:数组 6、JavaSE:面向对象 7、JavaSE:异常机制 8、JavaSE:常用类 9、JavaSE:集合框架 10、JavaSE:IO流 11...

    java笔记.docx

    Java中的变量必须先声明后使用。 Java中的数组是对象,可以使用new关键字创建。...Java中的文件处理可以使用File类和IO流进行读写操作。 Java中的网络编程可以使用Socket和ServerSocket实现基于网络的应用程序开发。

    Java笔记编辑查看器实例源代码.rar

    把File对象也放该函数内,以使引用FileIO对象的类更整洁,因为每次文件目录树收起时也触发valueChanged函数,所以此处加if判断是否是收起操作。该判断条件来源与打印((JTree) e.getSource()).getSelectionPath()调试...

    狂神笔记,b站狂神说课程笔记大全(最新)

    狂神说java系列笔记(java基础+javaweb+ssm+微服务)全套 狂神说上课笔记未删减 Java基础到技术升级 1、JavaSE:Java入门 2、JavaSE:基础语法 3、JavaSE:流程控制 4、JavaSE:方法 5、JavaSE:数组 6、JavaSE:...

    Java学习笔记

    3、JAVA应用开发部分:JAVA类集、JAVA IO、JDBC; 概念和原理方面:线程、类库API(文档)、泛型、枚举、注解、反射、网络等 JAVA中最大的特点是面向对象,面向对象的概念最早出现在70年代,由Smaltalk(IBM)提出来的...

    java课堂笔记总.docx

    输入输出(IO): 如何在Java中进行文件和流的读写操作,以及如何处理输入输出。 集合框架: 学习使用Java提供的集合框架来管理和操作数据集合,如数组、列表、集合和映射等。 多线程编程: 学习如何创建和管理多...

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...

    day019-io笔记和代码.rar

    3. IO流工具类的抽取,将所有的关流(字节流和字符流)方法抽取出来,优化代码 4. 字符流:(重点) * 使用场景:使用于处理文本相关的文件 * * Reader 抽象类: * |子类 * ...

    Android代码-一个集Gank.Io,Rxjava示例,操作符,MD控件使用,各种好玩Ap示例的学习App。

    安卓艺术开发探索读书笔记,EffectiveJava读书笔记. 收集各大神博客以及安卓笔记,安卓面试笔记等方便手机端查看. 更新说明 v2.2.2 1.增加了一些最近在学习比较好的安卓大神的博客. 2.增加了来自GeniusVJR整理的安卓...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    实现一个拷贝文件的类使用字节流还是字符串.mp4 │ Java面试题13.线程的实现方式 怎么启动线程怎么区分线程.mp4 │ Java面试题14.线程并发库和线程池的作用?.mp4 │ Java面试题15.设计模式和常用的设计模式.mp4 │ ...

    高级java笔试题-ShiftJava:学到头秃的Java的小笔记

    高级java笔试题 整理了一波学到头秃的 Java 入坑笔记,劝退一波,别搞后端了,转算法去吧!...IO:文件操作、IO流、网络操作等(NIO 放到了 Netty 部分)。 其他:Java性能问题定位、必备技能等。 数据结构与算法 算

Global site tag (gtag.js) - Google Analytics