`
zhangxiang390
  • 浏览: 216477 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java的文件和流(下)

阅读更多

8.对象流

    串行化:对象通过写出描述自己状态的数值来记述自己的过程叫串行话
    对象流:能够输入输出对象的流
    将串行化的对象通过对象流写入文件或传送到其他地方
    对象流是在普通流上加了传输对象的功能,所以构造对象流时要先构造普通文件流
    注意:只有实现了Serializable接口的类才能被串行化
    例子:

import java.io.*;
class Student implements Serializable{
	private String name;
	private int age;
	
	public Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	
	public void greeting(){
		System.out.println("hello ,my name is "+name);
	}
	
	public String toString(){
		return "Student["+name+","+age+"]";
	}
}

public class ObjectOutTest{
	public static void main(String args[]){
		ObjectOutputStream oos=null;
		try{
			oos=new ObjectOutputStream(
			new FileOutputStream("student.txt"));
			Student s1=new Student("Jerry",24);
			Student s2=new Student("Andy",33);
			
			oos.writeObject(s1);
			oos.writeObject(s2);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(oos!=null)
			try{
				oos.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}

import java.io.*;
public class ObjectInTest{
	public static void main(String args[]){
		ObjectInputStream ois=null;
		Student s=null;
		try{
			ois=new ObjectInputStream(
			new FileInputStream("student.txt"));
			System.out.println("--------------------");
			s=(Student)ois.readObject();
			System.out.println(s);
			s.greeting();
			System.out.println("--------------------");
			s=(Student)ois.readObject();
			System.out.println(s);
			s.greeting();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(ois!=null)
			try{
				ois.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}

 9.字符流 InputStreamReader/OutputStreamWriter

    上面的几种流的单位是 byte,所以叫做字节流,写入文件的都是二进制字节,我们无法直接看,下面要学习的是字节流
    Java采用 Unicode 字符集,每个字符和汉字都采用2个字节进行编码,ASCII 码是 Unicode 编码的自集
    InputStreamReader 是 字节流 到 字符桥的桥梁 ( byte->char 读取字节然后用特定字符集编码成字符)
    OutputStreamWriter是 字符流 到 字节流的桥梁 ( char->byte )
    他们是在字节流的基础上加了桥梁作用,所以构造他们时要先构造普通文件流
    我们常用的是:
    BufferedReader 方法:readLine()
    PrintWriter 方法:println()

    例子:

import java.io.*;
public class PrintWriterTest{
	public static void main(String args[]){
		PrintWriter pw=null;
		try{
			pw=new PrintWriter(
			new OutputStreamWriter(
			new FileOutputStream("bufferedwriter.txt")));
			pw.println("hello world");
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(pw!=null)
			try{
				pw.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}

import java.io.*;
public class BufferedReaderTest{
	public static void main(String args[]){
		BufferedReader br=null;
		try{
			br=new BufferedReader(
			new InputStreamReader(
			new FileInputStream("bufferedwriter.txt")));
			System.out.println(br.readLine());
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(br!=null)
			try{
				br.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}

  10.随机存取文件 RandomAccessFile

    可同时完成读写操作
    支持随机文件操作的方法:
    readXXX()/writeXXX()
    seek() 将指针调到所需位置
    getFilePointer() 返回指针当前位置
    length() 返回文件长度
    例子:把若干个32位的整数写到一个名为 “temp.txt”的文件中,然后利用seek方法,以相反的顺序再读取这些数据

import java.io.*;
public class RandomFile{
	public static void main(String args[]){
		RandomAccessFile raf=null;
		int data[]={12,31,56,23,27,1,43,65,4,99};
		try{
			raf=new RandomAccessFile("temp.txt","rw");
			for(int i=0;iraf.writeInt(data);
			for(int i=data.length-1;i>=0;i--){
			raf.seek(i*4);
			System.out.println(raf.readInt());
			}
		}catch(Exception e){
			e.getMessage();
		}finally{
			if(raf!=null)
			try{
				raf.close();
			}catch(Exception e){
				e.getMessage();
			}
		}
	}
}

 

11.小结
    
    这部分的难点就是类比较复杂,尤其是每个类的构造方式,我认为记住下面这个图比记类的继承关系更好些

    a. 字节流:
    InputStream
    |-- FileInputStream (基本文件流)
    |-- BufferedInputStream
    |-- DataInputStream
    |-- ObjectInputStream
    OutputStream 同上图
    BufferedInputStream DataInputStream ObjectInputStream 只是在 FileInputStream 上增添了相应的功能,构造时先构造FileInputStream

    b. 字符流:
    Reader
    |-- InputStreamReader (byte->char 桥梁)
    |-- BufferedReader (常用)

    Writer
    |-- OutputStreamWriter (char->byte 桥梁)
    |-- BufferedWriter
    |-- PrintWriter (常用)

    c. 随机存取文件 RandomAccessFile

分享到:
评论

相关推荐

    文件和流 文件和流 java文件和流

    java文件和流java文件和流java文件和流java文件和流java文件和流java文件和流java文件和流java文件和流java文件和流

    java读取图片文件流

    java读取本地图片文件获取流!java读取本地图片文件获取流!

    Java流(文件读写操作)

    Java中处理文件和数据时,使用流的概念来进行操作。根据不同的标准,流可以分为几种类型。 ##### 1. 按数据流动方向 - **输入流**:主要用于从数据源读取数据。输入流只能从中读取数据,而不能向其中写入数据。...

    java post文件流的操作

    在Java中,通过`HttpURLConnection`类可以轻松地实现POST请求,用于发送和接收文件流。该方法主要涉及到以下几个步骤: - **创建URL对象**:首先需要根据指定的URL地址创建一个`URL`对象。 - **设置HTTP连接属性**...

    Java中文件IO流.pdf

    文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream 和 OutputStream 两大类。 InputStream 是 Java 中的输入流接口,用于读取文件的内容,常用的 InputStream 子类包括 ...

    java文件与流操作code

    Java文件与流操作是Java编程中的重要组成部分,主要用于数据的读写、传输和处理。在Java中,I/O(输入/输出)系统是通过流(Stream)的概念来设计的,流是数据传输的抽象表示,可以是文件、网络连接、内存缓冲区等。...

    JAVA文件流控制台程序

    在Java编程语言中,文件流是用来处理输入/输出...在"JAVA文件流控制台程序"这个示例中,我们可以通过阅读和分析提供的两个文件(Java写入文件1.txt和java写入文件.txt),进一步理解这些概念和技术在实际项目中的运用。

    JAVA流文件全部例子

    JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子JAVA流文件全部例子

    Java文件流关闭和垃圾回收问题

    周末碰到一段代码,是关于Java IO流的,代码中出现在一个多线程的系统中,其中一段代码在打开一个文件操作流用完以后没有及时关闭,开始以为很快会出现打开文件太多或者导致内存溢出,但是在运行了很长时间以后仍然...

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

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

    java文件流操作.docx

    以下是对标题"java文件流操作.docx"和描述中提到的知识点的详细说明: 1. **字节流(Byte Stream)**: Java中的`InputStream`类用于处理字节流,它提供了一种按字节读取文件内容的方式。`FileInputStream`是`...

    Java流和文件总结(二)

    在Java编程语言中,流(Stream)和文件操作是核心概念,它们对于处理输入和输出数据至关重要。在本文中,我们将深入探讨Java流和文件处理的一些关键知识点。 首先,流是Java中的一个抽象概念,它代表了数据的有序...

    java文件流学习实验

    这个"java文件流学习实验"显然是一系列用Java编写的实验,目的是深入理解和掌握文件流的概念和应用。实验中的代码文件(Test11.java、Test12.java等)很可能包含了不同类型的文件流操作示例,如读取、写入、复制和...

    Java文件输入输出流.ppt

    Java文件输入输出流,详细描述了java对文件流的操作

    java的io流文件读写

    9. 遍历目录:除了单个文件的读写,Java还提供了File类来处理目录操作,如列出目录下的文件和子目录。 总之,Java的IO流提供了一套丰富的接口和类,用于处理各种输入输出任务,包括文件的读写。理解并熟练运用这些...

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    java文件流

    Java文件流 Java中的输入输出是以流(Stream)来方式来处理的,流是在计算机的输入、输出操作中流动的数据序列(从网上下载软件时能清晰地感受到)。在 Java 中,流是指一序列的数据元素,这些数据元素是从一个...

    java文件路径获取

    - **Resource**: 在Java中通常指的是类路径下的文件,如配置文件、图片等非可执行代码的文件。 - **URL**: Uniform Resource Locator 的缩写,即统一资源定位符,是一种标识Internet资源位置的方式。 #### 三、主要...

    Java文件流的常见错误

    默认情况下,Java文件流使用平台默认编码,这可能在跨平台环境中导致问题。使用`InputStreamReader`和`OutputStreamWriter`结合特定的字符编码(如UTF-8)可以解决此问题。 5. **缓冲区大小选择不当**: 当使用`...

Global site tag (gtag.js) - Google Analytics