`

java 输入流与输出流相关知识

阅读更多

     流是生产或消费信息的一种抽象描述,通过java的输入/输出系统与外部设备连接,并为所有的输入/输出提供统一、简单的操作方法。

     输入流和输出流不是绝对不变的。对于一个文件而言,当向其中写入数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。对于键盘来说,只能是输入流;显示器则只能是一个输出流。

     在io包中,还根据流中的数据类型不同,将流分为字节流类和字符流类。其中,字节流类专门负责处理以字节为传输单位的操作;而字符流类则专门负责处理以字符为传输单位的操作。

     根据流的建立方式和工作原理,还将流类分为节点流和过滤流类。节点流类用于直接在输入输出媒介之上建立流,而过滤流类则用于对节点流类功能上的扩展,此时它必须先以某一个节点流对象作为流的来源,然后可以修改已经读出或写入的数据(包括加密和压缩的数据),甚至还可以简单地利用自身提供的附加方法将已经读出或者写入的数据转化成其他格式。

      System.in是标准的输入流,默认情况下,它指的是键盘。System.out是标准的输出流,默认情况下,它指的是某一个控制台,如显示器。System.err指的是标准的错误流,它默认也是控制台。


     File类在java中,它既可以代表一个特定文件,也可以代表目录内一系列文件的集合。当代表的是一个文件的集合时,便可以使用目录所特有的属性list()方法来查询这个集合,并列出当前集合中的文件名,该方法返回的是一个字符串数组。

 

指定目录下的所有文件都列出来

import java.io.*
class  ListAllFiles{
 public void listPath(File path){
 
  File files[] = path.listFiles();//获得当前目录对象下的所有文件
  for(int i=0;i<files.length;i++){
   if(files[i].isFile()){
    System.out.println(files[i].getPath());
   }else if{
    System.out.println(files[i].getPath());
    listPath(files[i]);//递归调用listPath方法
   }
  }
 }
 
 public static void main(String [] args){
  File dir = new File(args[0]);
  ListAllFiles list = new ListAllFiles();
  list.listPath(dir);
 }
 
}

==============================================================================================================
删除某个目录下的所有文件

import java.io.*;
import java.util.*;

class DeleteDir{

 public DeleteDir(File dir){
 
  if(dir.isDirectory()){
   LinkListed dirs = new LinkedList();
   dirs.add(dir);
   
   while(dirs.size()>0){
    File currentDir = (File)dirs.getFirst();
    File[] files = currentDir.listFiles();
    boolean emptyDir = true;
    for(int i=0;i<files.length;i++){
     if(files[i].isFile()){
      System.out.println("Deleting ..." +files[i].getAbsolutePath());
      
      try{
       files[i].delete();
      }catch(SecurityException e){
       e.printStackTrace();
      }
     
     }else{
     
      dirs.addFirst(Files[i]);
      emptyDir = false;
      
     }
    
    }
    if(emptyDir){
     System.out.println("Deleting ..."+currentDir.getAbsolutionPath());
     try{
      currentDir.delete();
     }catch(SecurityException e){
      e.printStackTrace();
     }
     dirs.removeFirst();
    
    }
    }
  
  
  }
  else if(dir.isFile()){
   System.out.println("Error:"+dir.getName()+"is a file");
  }else{
   System.out.println("Error:"+dir.getName()+"is unknow");
  }
  
  public static void main(String[] args){
   File dir = new File(args[0]);
   DeleteDir delDir = new DeleteDir(dir);
  }
 
 }


}


=====================================================================================================================
flush()方法仅用于支持缓冲区操作的输出流类,而fileOutputStream类是用于直接操作目标设备所对应的节点流类,因此该流类不支持flush()方法。直接操作目标设备的节点流类还有ByteArrayOutputStream。

 

文本文件与二进制文件的区分:
简单的办法就是把所有可以用于文本编辑器打开的文件都称为文本文件,如.txt,.bat,.ini文件等。这些文件中所有的字符都是可读的ASCII码字符。除了这些文件之外其他所有不能被文本编辑器正确打开的文件都是二进制文件。Word文件不能被文本编辑器打开,自然就是二进制文件。

 

BufferInputStream类可以对任何的InputStream流进行带缓冲的封装以达到性能的改善。它的实现原理是,在已定义输入流上再定义一个具有缓冲的输入流,可以从此流中成批地读取字节,而不会每次都引起直接对数据源的读操作。数据输入时,首先被放入缓冲区,随后的读操作,就是对缓冲区中内容进行访问。

 

BufferOutputStream类可以对任何的OutputStream流进行带缓冲的封装以达到性能的改善。这是因为,用户在缓冲输出流中写入字节时,不会每次都直接对数据宿进行写操作,而是当缓冲区已满或者清空流时,数据才写到数据宿上。

 

BufferOutStream提供了一个flush()方法可以用来将缓冲区的数据强制输出到数据宿。可见,与缓冲区输入流不同的是,建立缓冲区输出流可以通过减少系统实际写数据的时间和次数来改善I/O性能。

 

flush()方法并不是对所有的输出流都起作用,而是只对那些使用了缓冲区的输出流才有效。而且如果调用了close()方法,系统也会在关闭这个流之前将缓冲区的内容刷新到外部设备中去,只是这样做会存在不安全的因素。

 

字节流与字符流的转换:
InputStreamReader:将字节转换为字符的输入流
OutputStreamWriter:将字符转换为自己的输出流 

分享到:
评论

相关推荐

    浅谈输入输出流

    Java语言的输入输出功能是十分...在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。

    Java程序设计基础:控制台输入输出.pptx

    System.in 表示Java标准输入流,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。 Scanner in =new Scanner(System.in); 从控制台获取输入 创建输入流对象in 必须先导入Scanner类 import java.util....

    《Java程序设计》输入输出流.ppt

    本资源详细的讲解了java程序设计中输入输出流的知识,包括输入输出基类,File I/O,数据输入输出流,随机存取文件,文件的其它操作,java 中的unicode等.值得大家分享.

    Java输入输出(IO)和流的基本概念-Java教程共2页

    Java输入输出(IO)和流的基本概念_Java教程共2页.pdf.zip

    完整版 Java高级教程 Java语言程序设计 第1章 输入输出流(共42页).ppt

    完整版 Java高级教程 Java语言程序设计 第1章 输入输出流(共42页).ppt 完整版 Java高级教程 Java语言程序设计 第2章 Java多线程(共24页).ppt 完整版 Java高级教程 Java语言程序设计 第2章 哲学家的故事(共7页)...

    Java IO(输入输出)案例练习

    2个Java的小练习代码,适合Java初学者使用,主要使用了Java中IO(输入输出)中的字节流和字符流知识。第一个是字节流的例子(模拟保存每日交易记录),第二个是字符流的例子(模拟记事本程序)。

    Java数据流发送或接收数据高级IO流.ppt

    Java语言中数据流是发送或接收数据的管道...流的单向性:源端点和目的端点分别叫做input stream(输入流)和output stream(输出流)。 你可以从输入流读,但你不能对它写;同样,你可以向输出流写,但不能从输出流读。

    Java之IO流学习总结

    PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。 ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。 2.输出字节流OutputStream IO 中...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    它包含了常见的IO类和方法的使用示例,旨在帮助理解和掌握Java中的输入输出操作。 包含: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)...

    Java程序设计知识点思维导图

    文件格式为:XMIND格式的,可通过软件Xmind打开哦...2、输入流与输出流 3、继承与接口 4、JDBC与MySQL数据库 5、泛型与集合框架 6、Java多线程机制 7、类与对象 8、常用实用类 9、内部类、匿名类与Lambda表达式、异常类

    手写一个文件上传demo

    可以按照数据传输的方向,将流可分为输入流和输出流,它是java中相对比较重要的知识点,无论是考试、面试,还是实际工作过程中,这都是经常能够使用到的身影。希望各位看官们可以更好地了解流的相关知识。 输入流 ...

    JAVA的类包说明。。.rar_java swing_java 网络_流媒体 java

    Java的常用方法说明 包括 输入输出流,java网络的基本知识,Java与图像,Java数据库连接(JDBC) ,Java与多媒体 ,Java Swing基础

    java基础知识IO流讲解和练习.rar

    Java IO流是Java语言中用于处理输入输出操作的核心技术之一。通过IO流,你可以读取和写入各种数据类型,包括文本、二进制数据等。在Java中,IO流分为字节流和字符流。

    Java基础知识

    总结了java中的基础知识,十分全面,适合初学者使用 java是通过流的方式再输入输出设备...按照数据传输方向的不同可以分为输入流和输出流 字节流------输入 InputStream/OutputStream 字符流------输入Reader /Writer

    详细解读Java编程中面向字符的输入流

    主要介绍了Java中面向字符的输入和输出流,是Java入门学习中的基础知识,需要的朋友可以参考下

    javaIO核心知识

    javaIO核心知识,里面简要介绍了输入流、输出流、缓冲区以及各种buffer操作

    Java程序设计与项目实战全程实录光盘

    由浅入深、循序渐进地向读者讲述了Java开发环境的搭建、Java基础语法知识、Java算法流程、面向对象高级特性、Java的输入/输出、多线程机制、Swing界面编程、Applet的基本知识、Java 2D/3D、Java流媒体、JDBC 编程...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java_IO.rar

    java se 输入输出流视频,简单易懂,帮助理解IO方面知识

    文件流的输入,输出操作

    java基础io流的知识点。包括方法,File类,文件的输出和输入。文件的读取,复制,粘贴等代码和知识笔记。序列化及反序列化。二级制文件的读写。

Global site tag (gtag.js) - Google Analytics