`

java.io常见流

阅读更多

今天学习了下java的IO流,这里做个总结,方便查找。

 

InputStream/OutputSrteam

InputStream是个抽象类,表示字节输入流的所有类的超类。常见的有向文件写入数据。

OutputStream是个抽象类,表示字节输出流的所有类的超类。常见的有从文件写出数据。

继承关系:




  





 

举例:采用FileInputStream/FileOutputStream读写文件。

 

package yingjun.io;

import java.io.*;
//读取文件
public class TestFileInputStream {
  public static void main(String[] args) {
    FileInputStream in = null;//定义一个输入字节流
    try {
      in = new FileInputStream("D:/test/newfilename.txt");
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件"); 
      System.exit(-1);
    }
    
    try {
      long num = 0;
      int b = 0;
      while((b=in.read())!=-1){ //不等于-1就说明没有读到结尾
        System.out.print((char)b); //输出字节
        num++;
      }
      in.close();  
      System.out.println();
      System.out.println("共读取 "+num+" 字节");
    } catch (IOException e1) {
      System.out.println("文件读取错误"); System.exit(-1);
    }
  }
}

 
 

package yingjun.io;

import java.io.*;
//读出文件并写入另一个文件
public class TestFileOutputStream {
  public static void main(String[] args) {
	  int b = 0;
	  FileInputStream in = null;//用于读文件
	  FileOutputStream out = null;//用于向文件写数据
	  try {
	    in = new FileInputStream("D:/test/oldfile.txt");//就像在oldfile这个文件里插入一个管道用于读取里面的内容。
	    out = new FileOutputStream("D:/test/newfile.txt");//就像在newfile这个文件里插入一个管道用于向里面写人内容
	    while((b=in.read())!=-1){
	      out.write(b);
	    }
	    in.close(); 
	    out.close();
	  } catch (FileNotFoundException e2) {
	    System.out.println("找不到指定文件"); System.exit(-1);
	  } catch (IOException e1) {
	    System.out.println("文件复制错误"); System.exit(-1);
	  }
	  System.out.println("文件已经复制");
  }
}

##################################################################

Reader/Writer

 

Reader用于读取字符的抽象类子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

 Writer写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

 

 

 举例:采用FileReader/FileWriter读写文件。

package yingjun.io;

import java.io.*;
//读取文件
public class TestFileReader {
  public static void main(String[] args) {
    FileReader fr = null; 
    int c = 0;
    try {
      fr = new FileReader("D:/test/newfilename.txt");
      while ((c = fr.read()) != -1) {
        System.out.print((char)c);
      }
      fr.close();
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件");
    } catch (IOException e) {
      System.out.println("出错");
    }

  }
}

 

package yingjun.io;

import java.io.*;
//写入文件
public class TestFileWriter {
  public static void main(String[] args) {
    FileWriter fw = null;
    try {
      fw = new FileWriter("D:/test/newfilename.txt");
      for(int c=0;c<=50000;c++){
        fw.write(c);//c表示的是unicode编码,50000基本涵盖了所有国家的文字。
      }
      fw.close();
    } catch (IOException e1) {
    	e1.printStackTrace();
      System.out.println("出错");
      System.exit(-1);
    }
  }
}

  ######################################################################## 

                                                                      常见处理流

 ########################################################################



 

1:缓冲流

 

package yingjun.io;

import java.io.*;
public class TestBufferStream2 {
  //向一个文件里写入数据并且从中读取出
  public static void main(String[] args) {
    try {
      BufferedWriter bw = new BufferedWriter(new FileWriter("D:/test/DateTest.java,true"));//true表示不会删除文件之前所有的内容
      BufferedReader br = new BufferedReader( new FileReader("D:/test/DateTest.java"));
      String s = null;
      for(int i=1;i<=10;i++){
        s = String.valueOf(Math.random()); 
        bw.write(s);
        bw.newLine();
      }
      bw.flush();
      while((s=br.readLine())!=null){  //BufferReader有缓存区的功能,可以读一行
        System.out.println(s);
      }
      bw.close(); 
      br.close();
    } catch (IOException e) {
    	e.printStackTrace();
    }
  }
}

 2:转换流

 

 

package yingjun.io;

import java.io.*;
public class TestTransForm2 {
  public static void main(String args[]) {
    InputStreamReader isr = new InputStreamReader(System.in);//System.in代表键盘输入流
    BufferedReader br = new BufferedReader(isr);//在外面再套接一层
    String s = null;
    try {
      s = br.readLine(); //等待键盘输入直到输入一行
      while(s!=null){
        if(s.equalsIgnoreCase("exit")) break; 
        System.out.println(s.toUpperCase());
        s = br.readLine(); 
      }
      br.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
} 

 3:数据流

 

 

package yingjun.io;

import java.io.*;
public class TestDataStream {
  public static void main(String[] args) {
    ByteArrayOutputStream baos =  new ByteArrayOutputStream(); //定义字节数组流
    DataOutputStream dos = new DataOutputStream(baos);//套接数据类型流
    try {
      dos.writeDouble(Math.random());//写入double类型数据
      dos.writeBoolean(true);
      ByteArrayInputStream bais =  new ByteArrayInputStream(baos.toByteArray());
      System.out.println(bais.available());
      DataInputStream dis = new DataInputStream(bais);
      System.out.println(dis.readDouble());//读取double类型数据
      System.out.println(dis.readBoolean());
      dos.close(); 
      dis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

  4:打印流

 

 

package yingjun.io;

import java.io.*;
public class TestPrintStream1 { 
  public static void main(String[] args) {
    PrintStream ps = null;
    try {
      FileOutputStream fos =  new FileOutputStream("D:/test/DateTest.java");
      ps = new PrintStream(fos);
    } catch (IOException e) {
      e.printStackTrace();
    }
    if(ps != null){
      System.setOut(ps);//设定System.out输出到ps(原来是在dos)
    }
    for(char c = 0; c <= 60000; c++){
      System.out.print(c+ " ");//print具有自动的flush功能,所有数据将被写入文件
    }
  }
}

 

package yingjun.io;

import java.text.SimpleDateFormat;
import java.util.*; 
import java.io.*;
//类似log功能
public class TestPrintStream3 {
  public static void main(String[] args) {
    String s = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try {
      FileWriter fw = new FileWriter ("D:/test/log.java", true);//log 
      PrintWriter log = new PrintWriter(fw);
      while ((s = br.readLine())!=null) {
        if(s.equalsIgnoreCase("exit")) break;
        System.out.println(s.toUpperCase());
        log.println("-----");
        log.println(s.toUpperCase()); 
        //log.flush();
      }
      log.println("==="+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date())+"==="); 
      log.flush();
      log.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

 5:对象流

 

package yingjun.io;

import java.io.*;

public class TestObjectIO {
	public static void main(String args[]) throws Exception {
		T t = new T();
		t.k = 111;
		FileOutputStream fos = new FileOutputStream("D:/test/DateTest.java");
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		oos.writeObject(t);
		oos.flush();
		oos.close();
		FileInputStream fis = new FileInputStream("D:/test/DateTest.java");
		ObjectInputStream ois = new ObjectInputStream(fis);
		T tReaded = (T)ois.readObject();
		System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
	}
}

class T implements Serializable //可以被序列化的(可以把对象写到文件或者网络上传输)
{
	int i = 10;
	int j = 9;
	double d = 2.3;
	transient int k = 15; //transient修饰的成员变量在序列化的时候不考虑
}

 

 

5
5
分享到:
评论
3 楼 wosyingjun 2013-06-13  
rainsilence 写道
虽说整理出来时值得推崇的,但是这个写法。。。最起码流有开就要有关吧。而且应该全部放finally里。

套接流只需要把最外面的那层关了就行。。。
2 楼 annimal 2013-06-13  
学习一下!
1 楼 rainsilence 2013-06-12  
虽说整理出来时值得推崇的,但是这个写法。。。最起码流有开就要有关吧。而且应该全部放finally里。

相关推荐

    java.io.FileNotFoundException: *****(Too many open files)

    在Java编程中,"java.io.FileNotFoundException: ***** (Too many open files)" 是一个常见的错误,意味着程序尝试打开的文件数量超过了操作系统的限制。这个错误通常出现在处理大量文件或长时间运行的程序中,尤其...

    rxtx-2.1.7.jar串口通信gnu.io包不存在问题

    在Java编程环境中,进行串口通信时,常常会遇到一个问题:缺少`gnu.io`包,导致无法正常编译或运行程序。这个问题主要出现在使用RXTX库进行串口操作的项目中。RXTX是一个开源的Java库,它提供了与硬件进行串行通信的...

    java socket.io 0.8.3

    5. **json-20090211.jar**:JSON(JavaScript Object Notation)是数据交换的常见格式,这里可能是用于解析和序列化Socket.IO的事件数据。 为了使用这些库实现Socket.IO通信,开发者首先需要在项目中添加对应的依赖...

    java_IO.rar

    9. **IO FAQ(05_IO_faq.avi)**:常见问题解答,可能涵盖异常处理、流的关闭、缓冲区大小选择等问题,帮助解决实际开发中遇到的问题。 10. **总结(10_总结.avi)**:最后的视频是对整个IO系列的回顾,总结关键...

    java file,java读取txt文档

    在Java编程中,读取和操作TXT文档是常见的任务,特别是在处理日志、配置文件或者进行数据交换时。本文将详细讲解如何使用Java File类和相关的I/O流来实现这一功能。 首先,让我们理解`java file`的概念。在Java中,...

    用java.util.zip包现数据压缩与解压

    import java.io.*; import java.util.zip.*; public class ZipExample { public static void main(String[] args) throws IOException { // 创建 ZipOutputStream 对象 FileOutputStream fos = new ...

    java 使用IO流实现文件的复制

    这里我们以字节流为例,使用`java.io.FileInputStream`作为读取源文件的输入流,`java.io.FileOutputStream`作为写入目标文件的输出流。 下面是一个简单的文件复制示例: ```java import java.io.*; public class...

    java io包课件

    在本章中,我们将深入探讨`java.io`包的关键知识点,特别是如何使用`File`类以及各种输入/输出流。 首先,让我们来看一下`File`类。`File`类是`java.io`包的核心组件之一,它可以用来表示文件或目录。通过`File`类...

    java 中序列化NotSerializableException问题解决办法

    Java 中序列化 NotSerializableException 问题是 Java 开发中常见的问题之一。 NotSerializableException 是 Java 中的一个异常,它发生在尝试序列化一个不implement Serializable 接口的对象时。今天,我们将讨论 ...

    java中的IO流操作大全

    在Java中,IO流操作是用于处理输入与输出的抽象机制,它提供了在不同的数据源和目标之间传输数据的手段。流的概念最早起源于UNIX系统中的管道概念,是一个连续的数据流,可以理解为水流,从源端流向目的端。 一、流...

    Java IO commons-io-2.5.jar

    Java IO 是Java编程语言中处理输入/输出流的重要部分,它是连接程序与外部世界的桥梁,允许数据在程序和外部资源之间流动。`commons-io-2.5.jar` 是Apache Commons项目的一部分,它提供了一系列增强和扩展了Java标准...

    JAVA教程IO流操作

    在Java编程语言中,IO(Input/Output)流是一组用于处理输入和输出操作的类和接口,它们允许我们读取和写入数据到各种类型的源和目标,如文件、网络连接、内存缓冲区等。Java IO流系统分为字节流和字符流两大类。 ...

    java 课件资料第01节:JAVA IO流.zip

    Java IO流是Java编程语言中处理输入输出操作的重要部分,它是数据传输的通道,允许程序在内存、硬盘、网络等不同设备间交换信息。在Java中,IO流分为字符流和字节流两大类,每类又分别有输入流和输出流四种类型,...

    上传文件必备jar包-commons.fileupload-1.2.1.jar和commons.io-1.4.0.jar

    在这个场景下,`commons-fileupload-1.2.1.jar` 和 `commons-io-1.4.0.jar` 是两个关键的Java库,它们提供了处理文件上传的强大支持。 `commons-fileupload-1.2.1.jar` 是Apache Commons FileUpload库的一个版本,...

    Java-IO.rar_java IO

    这两个知识点都是Java IO编程的基础,也是开发过程中常见的操作。熟悉并掌握它们对于任何Java开发者来说都是非常重要的。通过不断实践和理解这些基本概念,可以为更高级的IO操作和复杂的数据处理奠定坚实的基础。

    javaIo操作的基础代码

    常见的字节流有`java.io.FileInputStream`(读取文件)和`java.io.FileOutputStream`(写入文件)。例如,我们可以使用`FileInputStream`读取文件内容,然后通过`FileOutputStream`将其写入另一个文件。 “字符流”...

    Java基础篇:IO流.pdf

    本知识点将深入探讨Java IO流的相关细节,包括节点流与处理流的概念,以及文件流、标准输入输出流、缓冲流、转换流、打印流、数据流和对象流的处理过程和使用方法。 首先,Java中的IO流根据数据流向可以分为输入流...

    JAVA_IO详解_包括讲解IO中各种流及其用法.pdf

    JAVA IO流是Java编程中用于处理输入输出操作的重要工具。IO流主要分为两大类,即输入流(Input Streams)和输出流(Output Streams),它们用于读取或写入数据到不同的数据源,比如文件、网络连接或内存中的字节数组。在...

    java io包中简单的常用类使用

    在Java编程语言中,`java.io`包是处理输入输出操作的核心部分,它包含了大量用于读写数据的类。这个包中的类广泛应用于文件操作、网络通信、标准输入输出流等场景。本篇文章将深入探讨`java.io`包中一些常用的类,并...

    common-io.jarcommon-io.jar

    Apache Commons IO是Java开发中常用的一个开源库,其核心组件是`common-io.jar`,这个库提供了大量的实用工具类,用于处理日常的输入/输出(I/O)操作。在Java标准库中,I/O操作虽然已经提供了一定的支持,但Apache ...

Global site tag (gtag.js) - Google Analytics