`
天边一朵雲
  • 浏览: 36306 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java输入/输出(io)记录

    博客分类:
  • JAVA
阅读更多

分类

字节输入流

字节输出流

字符输入流

字符输出流

抽象基类

InputStream

OutputStream

Reader

Writer

访问文件

FileInputStream

FileOutputStream

FileReader

FileWriter

访问数组

ByteArrayInputStream

ByteArrayOutputStream

CharArrayReader

CharArrayWriter

访问管道

PipedInputStream

PipedOutputStream

PipedReader

PipedWriter

访问字符串

StringReader

StringWriter

缓冲流

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

转换流

 

 

InputStreamReader

OutputStreamWriter

对象流

ObjectInputStream

ObjectOutputStream

 

 

抽象基类

FilterInputStream

FilterOutputStream

FilterReader

FilterWriter

打印流

 

PrintStream

 

PrintWriter

推回输入流

PushbackInputStream

 

PushbackReader

 

特殊流

DataInputStream

DataOutputStream

 

(斜体为抽象类,蓝色粗体为节点流,红色为处理流)

I/O不熟悉知识点:

File类

文件过滤器

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import static java.lang.System.out;

/**
 * ClassName:FilefilterTest	 
 */
public class FilefilterTest {

	public static void main(String[] args) throws IOException {
		//新建一个路径
		File filePath = new File("C:/DOCUME~1/Temp");
		if(filePath.isDirectory()) {
			//调用自定义过滤器
			String[] files = filePath.list(new FileFilter());
			for(String fileName : files) {
				out.println(fileName);
			}
		}

	}
}
/**
 * ClassName:FileFilter
 */
class FileFilter implements FilenameFilter {
	@Override
	public boolean accept(File dir, String name) {
		//设定自定义过滤器的条件  过滤所有非dir路径下的java文件和文件夹
		return name.endsWith(".java") || new File(dir+File.separator+name).isDirectory();
	}
}


类似的还有File[] java.io.File.listFiles(FilenameFilter filter);

节点流>字节流>输入流

		File file = new File("F:\\testSource\\FilefilterTest.java");
		/*
		 * 输入流    节点流(InputStream(字节流) Reader(字符流)
		 * 实现类分别为FileInputStream FileReader)
		 */
		FileInputStream fis = new FileInputStream(file);
		byte[] b = new byte[(int) file.length()];
		int readLen = 0;
		if((readLen = fis.read(b))>0) {
			out.println(new String(b,0,readLen));
		}
		fis.close();


节点流>字节流>输出流

	/**
	 * fileOutput:(从输入字节流中读取数据由输入字节流接收写入到.txt文件)
	 * 文件copy的作用
	 */
	private static void fileOutput() throws IOException{
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try{
			File file = new File("F:\\testSource\\Struts2Test.java");
			fis = new FileInputStream(file);
			byte[] b = new byte[(int) file.length()];
			int readLen = 0;
			if((readLen = fis.read(b))>0) {
				File newFile = new File("F:\\testSource\\newFile.txt");
				if(!newFile.exists()) {
					newFile.createNewFile();
				}
				/*
				 * 输出流    节点流(OutputStream(字节流) Writer(字符流) 
				 * 实现类分别为FileOutputStream FileWriter)
				 */
				fos = new FileOutputStream(newFile);
				//字节流b  如果是Writer可以直接write(String str);
				fos.write(b,0,readLen);
			}
		}catch(FileNotFoundException e1){
			
		}catch(IOException e2){
			
		}finally{
			if(null!=fis)
				fis.close();
			if(null!=fos)
				fos.close();
		}

	}


处理流(包装节点流)

		//创建字节流
		FileOutputStream fos = new FileOutputStream(new File("F:\\testSource\\newFile2.txt"));
		//转换流包装输出流(将字节流转换成字符流)
		OutputStreamWriter osw = new OutputStreamWriter(fos);
		//向流中写入字符
		osw.write("this ");
		osw.write("is ");
		osw.write("OutputStreamWriter");
		//将流刷入文件
		osw.flush();
		//流关闭
		fos.close();


重定向输出流

	/**
	 * 重定向输出流
	 * @throws IOException 
	 */
	public static void redirectOutputStream() throws IOException {
		PrintStream ps = null;
		try {
			//新建输出流
			FileOutputStream fos = new FileOutputStream(new File("F:\\testSource\\newFile3.txt"));
			//转换节点流,PrintStream为输出流
			ps = new PrintStream(fos);
			//System重定向输出流(默认为控制台显示器)
			System.setOut(ps);
			out.println("重定向输出流到文件newFile3");
			ps.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}finally {
			if(ps!=null)
				ps.close();
		}
	}


重定向标准输入输出流的方法:System.setErr(PrintStream ps) System.setIn(PrintStream ps) System.setOut(PrintStream ps)

读取进程的输入流

	public static void readProcess() throws IOException {
		BufferedReader br = null;
		try {
			//打开计算器
			Process rt = Runtime.getRuntime().exec("calc");
			//将进程的InputStream 包装成转换流,再将转换流包装成缓冲流
			br = new BufferedReader(new InputStreamReader(rt.getInputStream()));
			String str;
			while((str = br.readLine())!=null){
				out.println(str);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if(br != null) {
				br.close();
			}
		} 
	}


实现对象序列化

序列化对象

import java.io.Serializable;
import lombok.Data;

public @Data class Person implements Serializable{
	private static final long serialVersionUID = 1L;
	private int age;
	private String name;
}


这里用到了lombok简化了javabean的编写

对象实例化以及读取实例化对象

	/**
	 * 实现对象序列化
	 * @throws IOException 
	 */
	public static void objectSerializable() throws IOException {
		ObjectOutputStream oos = null;
		ObjectInputStream ois = null;
		try {
			Person person = new Person();
			person.setAge(24);
			person.setName("zpf");
			/*
			 * 创建ObjectOutputStream(对象流)
			 * 把序列化对象输出到File对应的文件中
			 */
			oos = new ObjectOutputStream(new FileOutputStream(new File("F:\\testSource\\newFile4.txt")));
			/*
			 * 调用ObjectOutputStream的writeObject方法把对象写入文件
			 */
			oos.writeObject(person);
			oos.close();
			/*
			 * 读取文本文件序列化后的对象
			 * 创建输入流
			 */
			ois = new ObjectInputStream(new FileInputStream(new File("F:\\testSource\\newFile4.txt")));
			/*
			 * 读取流并转换成对象
			 */
			Person readPerson = (Person)ois.readObject();
			out.println("age:"+readPerson.getAge()+"	name:"+readPerson.getName());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}finally {
			if(null!=oos) {
				oos.close();
			}
			if(ois!=null) {
				ois.close();
			}
		}
	}


对象引用序列化:被序列化的非基本类型是可序列化的。代码略.....

 

自定义序列化总结:

1:若序列化对象中有些属性不需要序列化可用关键字transient修饰对象属性

例:

Person对象中的name属性可以这样定义:
private transient String name;


这样在序列化时就不会序列化name属性(反序列化取不到name属性)。

 

2:需要实现自定义序列化的对象类需要在其中加入三方法:

【1】writeObject(ObjectOutputStream oos)throws IOException {}

【2】readObject(ObjectInputStream ois) throws IOException,ClassNotFoundException {}

【3】readObjectNoData()throws throws ObjectStreamException{}

3:自定义序列化的对象类中重写Object writeReplace()throws ObjectStreamException{}方法(待确认)

这种方法可以把序列化对象类型按照需要转换。

 

转自:www.itlanguageexpress.info

分享到:
评论

相关推荐

    面试作品java c/s聊天室带简单界面

    【标题】"面试作品java c/s聊天室带简单界面"是一个基于Java的客户端/服务器(C/S)架构的聊天应用程序,它集成了图形用户界面(GUI)、套接字通信、文件输入/输出(File IO)以及多线程技术。这个项目展示了开发者...

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

    标题中的“jsp .java中输入输出流 java IO 下载 流的应用先01 > 02 > 01”指的是一个关于Java编程中输入输出流(IO)在JSP(JavaServer Pages)和Java应用程序中的使用,特别是针对文件下载场景的知识点讲解。...

    Java,彻底明白Java语言中的IO系统

    Java IO系统主要由`java.io`包提供支持,该包定义了一系列用于执行输入输出操作的类和接口。这些类和接口共同构建了一个面向对象的模型,使得开发者可以方便地进行数据的读取和写入操作。Java IO系统基于流的概念,...

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

    Java IO(输入输出)是Java编程中至关重要的一个部分,它负责处理程序与外部资源之间的数据传输。在Java中,IO被设计成一种抽象的概念,允许开发者以统一的方式处理各种类型的输入和输出设备,如硬盘、内存、网络...

    Java I/O流通讯录

    在Java中,I/O流用于处理数据的输入和输出,包括从键盘、文件、网络等源获取数据,以及将数据发送到显示器、打印机、文件或其他目的地。Java I/O流分为字符流和字节流两大类,分别处理文本和二进制数据。在这个...

    java IO流精讲 JAVA IO流实例开发

    Java IO流是Java平台中用于处理输入/输出操作的核心组件,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行交互。Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符...

    java IO 类层次图

    Java IO系统提供了丰富的类来支持不同类型的输入输出操作,包括但不限于文件读写、网络通信等。本文将通过分析一张清晰明了的Java IO类层次图,详细介绍Java IO体系中的主要类及其关系。 #### 二、Java IO 类层次...

    Java I/O文件读写/删除/复制等

    Java I/O 文件操作是Java编程中的重要组成部分,它允许开发者处理输入和输出,涉及文件的创建、读取、写入、删除以及复制等任务。在Java中,这些操作主要是通过java.io包提供的类来实现的。下面将详细介绍这些知识点...

    Java IO commons-io-2.5.jar

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

    Java学生管理系统GUI+IO流

    Java学生管理系统GUI+IO流是一个适合初学者的项目,它主要展示了如何在没有数据库支持的情况下,利用Java的图形用户界面(GUI)和输入输出(IO)流来实现一个简易的学生和教师信息管理功能。这个系统可能包括账户...

    Java IO 使用例

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许开发者在程序中与各种设备、文件、网络等进行数据交互。Java IO系统是基于流(Stream)的,数据通过流在源...

    java_tx.rar_java c/s

    - **数据交换**:通过输入输出流对象,实现客户端与服务器之间的数据传输。 6. **异常处理与安全** - **异常处理**:在网络通信中,必须对可能出现的IOException进行妥善处理,确保程序的健壮性。 - **安全性**...

    全面总结java IO体系

    Java IO体系是Java编程语言中用于处理输入输出操作的核心组件,它允许程序与各种数据源(如文件、网络、内存缓冲区等)进行交互。在Java中,输入输出操作是通过流(Stream)的概念来实现的,流是数据传输的通道,可以...

    java学习 输入和输出处理复习知识点

    1)java.io包 File类 什么是文件:相关记录或放在一起的数据的集合 访问文件属性的API:java.io.File类 File类构造方法: 方法 说明 File(String pathname) 接受文件名作为字符串 File(Strint dir,String ...

    Java IO流文档

    在Java中,输入输出流(简称IO流)是用来处理文件读写的核心技术之一。它主要包括两类:以字节为导向的流和以字符为导向的流。 ##### 1.1 以字节为导向的流 以字节为导向的流是指按照字节来进行数据读写的流,适用...

    JavaIO字节输出流的总结共6页.pdf.zip

    Java IO字节输出流是Java平台中用于处理数据输出的核心组件,主要负责将内存中的数据以字节形式写入到外部存储设备,如硬盘、网络、打印机等。本资料“JavaIO字节输出流的总结共6页.pdf.zip”详细阐述了Java字节输出...

    java知识点/java面试/java考试

    - **IO流**:学习输入/输出流的分类,BufferedReader、FileReader、FileWriter等基本操作。 2. **面向对象编程**: - **设计模式**:工厂模式、单例模式、装饰者模式、观察者模式等常见设计模式的实现与应用。 -...

    java之精髓IO流

    Java的IO系统提供了丰富的类库来支持各种类型的输入输出操作,包括文件读写、网络通信、内存数据处理等。 ##### 1.1 以字节为导向的Stream 以字节为导向的Stream是最基本的数据流形式,它以字节(8位二进制)为...

    Java-Java IO编程教程

    Java IO编程是Java开发中的重要组成部分,它负责处理输入(Input)和输出(Output)数据。在Java中,IO操作涉及到文件读写、网络通信、数据流管理等多个方面,是程序与外部世界交互的关键技术。本教程将通过视频形式...

    javaIO流知识大总结

    Java IO 流是Java平台中的核心概念,它...总之,Java IO流是Java开发中不可或缺的一部分,它提供了一整套强大且灵活的工具,用于处理各种数据源的输入输出操作。理解和熟练掌握Java IO流,对提升Java编程能力至关重要。

Global site tag (gtag.js) - Google Analytics