`

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输入与输出流的相关知识点。 1. **流的概念**: 流是Java I/O的核心概念,它代表数据的源或目的地。流可以是向文件、内存、网络连接等地方读写数据。Java中的流分为字节流和字符流,字节流处理...

    java输入输出流与文件处理

    ### Java输入输出流与文件处理 #### 重要概念与基础知识 **输入输出流与文件处理**在编程领域占据着核心地位,特别是在Java中,通过`java.io`包提供了丰富的类和接口来支持输入输出操作。这包括从键盘读取用户输入...

    Java 输入输出流 源码

    Java输入输出流是Java编程语言中的核心概念,用于在程序之间、程序与系统资源之间传输数据。这个主题包括了从磁盘、网络、内存到控制台等不同源和目标的数据读写操作。在这个Java作业中,你将深入理解并实践这一关键...

    JAVa输入输出流程序

    Java输入输出流(IO流)是Java编程语言中处理数据传输的核心部分,它允许程序进行数据的读取和写入操作。在Java中,一切皆为流,输入流用于读取数据,而输出流用于写入数据。这些流可以处理各种类型的数据,包括文本...

    java 输入输出流

    本篇文章将详细介绍Java中常见的输入输出流及其相关概念。 首先,我们来看`File`类。`File`类是Java中用于操作文件和目录的基本工具。它允许我们创建、删除、重命名文件,以及获取文件的相关信息,如文件大小、是否...

    java中的标准输入输出流

    本文介绍了Java中的标准输入输出流的相关知识,包括标准输入输出流的概念、重定向、字节流与字符流的区别、流的包装与缓冲以及对象的串行化等内容。掌握了这些基础知识,可以帮助开发者更有效地处理程序中的输入输出...

    一个输入流写到多个输出流

    在IT行业中,输入流(InputStream)和输出流(OutputStream)是Java.IO库中的核心概念,它们用于处理数据的读取和写入。标题提到的"一个输入流写到多个输出流"是一个常见的需求,特别是在并发编程和数据传输场景中。...

    java第十三章Java 输入输出流.rar

    理解并熟练运用这些Java输入输出流的知识点,对于开发涉及数据交换的Java应用至关重要,无论是处理本地文件、内存数据还是网络通信,都能游刃有余。在实际开发中,我们通常会根据需求选择合适的流类型,并通过组合...

    java输入输出流实习题

    它们又可以进一步分为输入流(Input Stream)和输出流(Output Stream),分别用于读取和写入数据。在本例中,我们主要涉及的是文件输出流,因为我们要将日志信息写入到文件中。 要实现`MyLog`类,我们首先需要导入...

    java输入输出流的代码示例

    在这个主题中,我们将深入探讨Java输入输出流的使用,通过具体的代码示例帮助你理解和掌握这个关键知识点。 1. **基本概念** - **InputStream** 和 **OutputStream**: 这是所有输入流和输出流类的基类,分别代表...

    java输入输出操作

    Java输入输出操作是Java编程中的基础且重要的一部分,它涵盖了数据的读取、写入以及文件和流的管理。在Java中,输入输出主要通过I/O流(Input/Output Stream)来实现,这些流用于在程序和外部资源之间传输数据。Java...

    Java io输入输出流及字符集

    本文将深入探讨Java中的输入输出流以及字符集的相关知识点。 一、Java IO流概述 Java的IO流模型是基于管道的概念,数据在不同设备之间流动就像水流在管道中传输一样。流可以分为四类:字节流(Byte Stream)和字符...

    java 源生压缩zip,rar 输入流输出流 下载

    在Java编程中,处理压缩文件是一项常见的任务,特别是在服务器端进行数据传输时。...以上是关于在Java中使用输入流和输出流进行源生压缩并提供直接下载的关键知识点。实际应用时,应根据具体需求和环境调整代码实现。

    jsp .java中输入输出流 java IO 下载 流的应用先01 > 02 > 01

    3. **输入流与输出流**:在Java中,`InputStream`和`OutputStream`是所有字节输入流和输出流的基类,而`Reader`和`Writer`则是所有字符输入流和输出流的基类。开发者可以根据具体需求选择合适的子类,如`...

    java输入输出代码

    - 流分为两种类型:输入流(Input Stream)用于数据的读取,输出流(Output Stream)用于数据的写入。 - 流又可以按照处理的数据类型分为字节流和字符流,如InputStream和OutputStream是字节流的基类,Reader和...

    java 文件输入输出流 实例代码

    Java的I/O流分为两大类:字节流和字符流,又分为输入流和输出流四种类型。本实例代码将深入探讨如何使用这些流进行文件操作。 1. 字节流: - InputStream 和 OutputStream 是所有字节输入流和输出流的超类。例如,...

    java代码输入 输出

    - `BufferedReader`是一个高效的缓冲字符输入流,它可以对字符输入流进行包装,并提供读取单个字符、读取字符串以及判断是否到达流末尾等功能。 - 创建`BufferedReader`实例时,通常会将`InputStreamReader`作为参数...

    《Java语言程序设计》课件及源代码_第6章 输入输出流

    文件输入流`FileInputStream`(`J_FileInputStream.java`)用于读取二进制文件,而`FileOutputStream`用于写入。`CopyBytes.java`可能是一个演示如何使用这两个类进行文件复制的例子。 2. **缓冲流(Buffered ...

    基于Java文件输入输出流实现文件上传下载功能

    本文将详细介绍基于Java文件输入输出流实现文件上传下载功能的相关知识点,包括文件上传和下载的实现原理、Java文件输入输出流的基础操作、Servlet的使用等。 文件上传 文件上传是指客户端将文件传输到服务器端的...

Global site tag (gtag.js) - Google Analytics