分类
|
字节输入流
|
字节输出流
|
字符输入流
|
字符输出流
|
抽象基类
|
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)架构的聊天应用程序,它集成了图形用户界面(GUI)、套接字通信、文件输入/输出(File IO)以及多线程技术。这个项目展示了开发者...
标题中的“jsp .java中输入输出流 java IO 下载 流的应用先01 > 02 > 01”指的是一个关于Java编程中输入输出流(IO)在JSP(JavaServer Pages)和Java应用程序中的使用,特别是针对文件下载场景的知识点讲解。...
Java IO系统主要由`java.io`包提供支持,该包定义了一系列用于执行输入输出操作的类和接口。这些类和接口共同构建了一个面向对象的模型,使得开发者可以方便地进行数据的读取和写入操作。Java IO系统基于流的概念,...
Java IO(输入输出)是Java编程中至关重要的一个部分,它负责处理程序与外部资源之间的数据传输。在Java中,IO被设计成一种抽象的概念,允许开发者以统一的方式处理各种类型的输入和输出设备,如硬盘、内存、网络...
在Java中,I/O流用于处理数据的输入和输出,包括从键盘、文件、网络等源获取数据,以及将数据发送到显示器、打印机、文件或其他目的地。Java I/O流分为字符流和字节流两大类,分别处理文本和二进制数据。在这个...
Java IO流是Java平台中用于处理输入/输出操作的核心组件,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行交互。Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符...
Java IO系统提供了丰富的类来支持不同类型的输入输出操作,包括但不限于文件读写、网络通信等。本文将通过分析一张清晰明了的Java IO类层次图,详细介绍Java IO体系中的主要类及其关系。 #### 二、Java IO 类层次...
Java I/O 文件操作是Java编程中的重要组成部分,它允许开发者处理输入和输出,涉及文件的创建、读取、写入、删除以及复制等任务。在Java中,这些操作主要是通过java.io包提供的类来实现的。下面将详细介绍这些知识点...
Java IO 是Java编程语言中处理输入/输出流的重要部分,它是连接程序与外部世界的桥梁,允许数据在程序和外部资源之间流动。`commons-io-2.5.jar` 是Apache Commons项目的一部分,它提供了一系列增强和扩展了Java标准...
Java学生管理系统GUI+IO流是一个适合初学者的项目,它主要展示了如何在没有数据库支持的情况下,利用Java的图形用户界面(GUI)和输入输出(IO)流来实现一个简易的学生和教师信息管理功能。这个系统可能包括账户...
Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许开发者在程序中与各种设备、文件、网络等进行数据交互。Java IO系统是基于流(Stream)的,数据通过流在源...
- **数据交换**:通过输入输出流对象,实现客户端与服务器之间的数据传输。 6. **异常处理与安全** - **异常处理**:在网络通信中,必须对可能出现的IOException进行妥善处理,确保程序的健壮性。 - **安全性**...
Java IO体系是Java编程语言中用于处理输入输出操作的核心组件,它允许程序与各种数据源(如文件、网络、内存缓冲区等)进行交互。在Java中,输入输出操作是通过流(Stream)的概念来实现的,流是数据传输的通道,可以...
1)java.io包 File类 什么是文件:相关记录或放在一起的数据的集合 访问文件属性的API:java.io.File类 File类构造方法: 方法 说明 File(String pathname) 接受文件名作为字符串 File(Strint dir,String ...
在Java中,输入输出流(简称IO流)是用来处理文件读写的核心技术之一。它主要包括两类:以字节为导向的流和以字符为导向的流。 ##### 1.1 以字节为导向的流 以字节为导向的流是指按照字节来进行数据读写的流,适用...
Java IO字节输出流是Java平台中用于处理数据输出的核心组件,主要负责将内存中的数据以字节形式写入到外部存储设备,如硬盘、网络、打印机等。本资料“JavaIO字节输出流的总结共6页.pdf.zip”详细阐述了Java字节输出...
- **IO流**:学习输入/输出流的分类,BufferedReader、FileReader、FileWriter等基本操作。 2. **面向对象编程**: - **设计模式**:工厂模式、单例模式、装饰者模式、观察者模式等常见设计模式的实现与应用。 -...
Java的IO系统提供了丰富的类库来支持各种类型的输入输出操作,包括文件读写、网络通信、内存数据处理等。 ##### 1.1 以字节为导向的Stream 以字节为导向的Stream是最基本的数据流形式,它以字节(8位二进制)为...
Java IO编程是Java开发中的重要组成部分,它负责处理输入(Input)和输出(Output)数据。在Java中,IO操作涉及到文件读写、网络通信、数据流管理等多个方面,是程序与外部世界交互的关键技术。本教程将通过视频形式...
Java IO 流是Java平台中的核心概念,它...总之,Java IO流是Java开发中不可或缺的一部分,它提供了一整套强大且灵活的工具,用于处理各种数据源的输入输出操作。理解和熟练掌握Java IO流,对提升Java编程能力至关重要。