- 浏览: 18828 次
文章分类
最新评论
Java IO 编程
1、基本概念
Java中对文件的操作是以流的方式进行的,流是Java内存中一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后还可以将这些流写到另外的目的地(文件、内存、控制台、网络)之所以叫做流,是因为这个数据序列在不同时刻所操作的是源的不同部分。
2、流的分类
流的分类方式一般有以下三种:
(1) 输入的方向分:输入流和输出流,输入和输出的参照对象是Java程序。
(2) 处理数据的单位分:字节流和字符流,字节流读取的最小单位是一个字节。
(3) 功能的不同分:节点流和处理流,一个是直接一个是包装的。
3、流分类的关系
流分类的根源来自四个基本的类,这四个类的关系如下:
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
4、其他知识补充
(1)什么是IO
IO(Input/Output)是计算机输入/输出的接口,Java的核心库java.io提供了全面的IO接口,包括:文件读写、标准设备输出等等。Java中的IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
(2)流IO和块IO
此外,Java也对块传输提供支持,在核心库java.nio中采用的便是块IO,流IO和块IO对比而言,流IO的好处是简单易用,缺点是效率不如块IO;相反块IO是效率比较高但是编程比较复杂。Java的IO模型设计非常优秀,它使用了Decorator模式,按照功能进行划分stream,编程过程中可以动态地装配这些stream,以便获取所需要的功能。
备注:以上资料提取自百度文库,链接地址如下:
http://wenku.baidu.com/view/9aa0ec35eefdc8d376ee3280.html
5、代码模拟实战
- import java.io.File;
- import java.io.IOException;
- public class FileDemoTest {
- /**
- * @description 基础File类操作
- * @param args
- * @throws IOException IO异常处理
- */
- public static void main(String[] args) throws IOException {
- // Windows系统下的文件目录格式,这个和Unix系统等不同
- // String pathSeparator = File.pathSeparator; // ;
- // String separator = File.separator; // \
- // 1、创建和删除文件
- File file = new File("d:\\helloworld.txt");
- // File file = new File("d:"+File.separator+"helloworld.txt");
- file.createNewFile(); // 创建文件
- if (file.exists()) { // 如果文件存在,则删除文件
- file.delete();
- }
- // 2、创建文件夹操作
- File file2 = new File("d:\\helloworld");
- // File file2 = new File("d:"+File.separator+"helloworld");
- file2.mkdir(); // 建立文件夹
- if (file2.isDirectory()) {
- System.out.println("hello-directory"); // 判断是否是目录
- }
- // 3、遍历文件或者文件夹操作
- File file3 = new File("d:\\");
- // File file3 = new File("d:"+File.separator);
- File files[] = file3.listFiles(); // 列出全部内容
- for (int i = 0; i < files.length; i++) {
- System.out.println(files[i]);
- }
- }
- }
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.FileInputStream;
- public class InputStreamDemo {
- /**
- * @description 字节流:输入流InputStream
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- // 字节流的输入流和输出流过程步骤比较固定
- // 第1步、使用File类找到一个文件
- File f = new File("d:" + File.separator + "helloworld.txt");
- // 第2步、通过子类实例化父类对象(InputStream为抽象类,本身不能直接实例化)
- InputStream input = new FileInputStream(f);
- // 第3步、进行读操作
- byte b[] = new byte[(int)f.length()]; // 数组大小由文件大小来确定
- for (int i = 0; i < b.length; i++) {
- b[i] = (byte) input.read(); // 读取内容
- }
- // 第4步、关闭输出流
- input.close();
- }
- }
- import java.io.File;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.FileOutputStream;
- public class OutputStreamDemo {
- /**
- *@description 字节流:输出流OutputStream类
- *@param args
- *@throws IOException
- */
- public static void main(String[] args) throws IOException {
- // 输入和输出流参考的是Java程序,输出流操作步骤也比较固定
- // 第1步、使用File类找到一个文件
- File f = new File("d:" + File.separator + "helloworld.txt");
- // 第2步、通过子类实例化父类对象
- //OutputStream out = new FileOutputStream(f);
- OutputStream out = new FileOutputStream(f,true);
- // 第3步、进行写操作
- String str = "say hello world!!!";
- byte b[] = str.getBytes();
- for(int i=0;i<b.length;i++){
- out.write(b[i]); // 单个写入
- }
- // out.write(b);
- // 重载方法write
- // public abstract void write(int b) throws IOException;
- // public void write(byte b[]) throws IOException {}
- // 第4步、关闭输出流
- out.close(); // 关闭输出流
- }
- }
- import java.io.File;
- import java.io.IOException;
- import java.io.Reader;
- import java.io.FileReader;
- public class ReaderDemo {
- /**
- *@description 字节流和字符流按照处理数据的单位划分
- *@param args
- *@throws IOException IO异常处理
- */
- public static void main(String[] args) throws IOException {
- // 第1步、使用File类找到一个文件
- File f = new File("d:" + File.separator + "helloworld.txt");
- // 第2步、通过子类实例化父类对象
- Reader input = new FileReader(f);
- // 第3步、进行读操作
- char c[] = new char[1024];
- int temp = 0;
- int len = 0;
- while ((temp = input.read()) != -1) {
- // 如果不是-1就表示还有内容,可以继续读取
- c[len] = (char) temp;
- len++;
- }
- // 第4步、关闭输出流
- input.close();
- }
- }
- import java.io.File;
- import java.io.IOException;
- import java.io.Writer;
- import java.io.FileWriter;
- public class WriterDemo {
- /**
- *@description 通过代码学习发现,基本上步骤一致的
- *@param args
- *@throws IOException
- */
- public static void main(String[] args) throws IOException {
- // 第1步、使用File类找到一个文件
- File f = new File("d:" + File.separator + "helloworld.txt");
- // 第2步、通过子类实例化父类对象
- Writer out = new FileWriter(f); // 通过对象多态性,进行实例化
- // 第3步、进行写操作
- String str = "\nsay hello\tworld";
- out.write(str);
- // 第4步、关闭输出流
- // out.flush(); // 清空缓冲
- out.close(); // 关闭输出流
- // 另外有缓冲功能的类为:BufferedReader
- }
- }
- import java.io.ByteArrayInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.Reader;
- import java.io.Writer;
- public class ByteAndCharStreamTest {
- /**
- *@description 字节流:InputStream,OutputStream
- * 字符流:Reader,Writer
- * // 字节流和字符流相互转换测试
- *@param args
- * @throws IOException 文件操作异常处理
- */
- public static void main(String[] args) throws IOException {
- // 1、输入流-字节流转换成字符流
- // 通过InputStreamReader类来进行转换
- InputStream is = new FileInputStream("d:\\helloworld.txt");
- Reader reader = new InputStreamReader(is); // 将字节流转换成字符流
- char c[] = new char[1024];
- int len = reader.read(c); // 读取操作,保存在字符数组中
- reader.close(); // 关闭操作
- System.out.println(new String(c,0,len)); // 字符数组转换成String类实例
- // 2、输出流-字节流转换成字符流
- // 通过OutputStreamWriter类来进行转换
- File f = new File("d:" + File.separator + "helloworld.txt");
- Writer out = new OutputStreamWriter(new FileOutputStream(f)); // 字节流变为字符流
- out.write("hello world!!!"); // 使用字符流输出
- out.close();
- // 3、从字符流到字节流转换可以采用String类提供的操作
- // 从字符流中获取char[],转换成String实例然后再调用String API的getBytes()方法
- // 接1中的代码如下,最后通过ByteArrayInputStream即可完成操作
- String str = new String(c,0,len);
- byte b[] = str.getBytes();
- InputStream is2 = new ByteArrayInputStream(b);
- is2.close();
- // 4、其他常见的流
- // 内存操作流ByteArrayInputStream,ByteArrayOutputStream
- // 管道流PipedOutputStream,PipedInputStream
- // 打印流PrintStream
- // 缓存流BufferedReader
- // ...等等
- }
- }
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- public class CharSetDemo {
- /**
- * @description 字符编码学习测试方法
- * @param args
- * @throws IOException 文件IO异常处理
- */
- public static void main(String[] args) throws IOException {
- // 1、字符编码,通过system类来获取
- String fe = System.getProperty("file.encoding");
- System.out.println(fe); // GBK
- // 2、进行转码操作
- OutputStream out = new FileOutputStream("d:\\helloworld.txt");
- byte b[] = "Java,你好!!!".getBytes("ISO8859-1"); // 转码操作
- out.write(b); // 保存
- out.close(); // 关闭
- }
- }
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.ObjectInputStream;
- import java.io.OutputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- class Demo implements Serializable{ // 实现序列化接口
- // 序列化方式之一,Java自身提供的序列化支持
- // 其他序列化方式,待以后有需要进一步学习
- private static final long serialVersionUID = 1L;
- private String info; // 定义私有属性
- // 如果某个属性不想被序列化,采用transient来标识
- //private transient String noser;
- public Demo(String info){
- this.info = info;
- }
- public String getInfo() {
- return info;
- }
- public void setInfo(String info) {
- this.info = info;
- }
- public String toString() {
- return "info = " + this.info;
- }
- }
- public class SerializedDemo {
- /**
- *@description 对象序列化、反序列化操作
- *@param args
- *@throws Exception
- */
- public static void main(String[] args) throws Exception {
- // 1、对象序列化是将内存中的对象转换成二进制形式的数据流
- // 2、对象反序列化刚好和对象序列化方向相反,将二进制数据流转换成对象
- // a、对象序列化采用ObjectOutputStream类
- ObjectOutputStream oos = null; // 声明对象输出流
- OutputStream out = new FileOutputStream("d:\\helloworld.txt");
- oos = new ObjectOutputStream(out);
- oos.writeObject(new Demo("helloworld"));
- oos.close();
- // b、对象反序列化采用ObjectInputStream类
- ObjectInputStream ois = null; // 声明对象输入流
- InputStream input = new FileInputStream("d:\\helloworld.txt");
- ois = new ObjectInputStream(input); // 实例化对象输入流
- Object obj = ois.readObject(); // 读取对象
- ois.close();
- System.out.println(obj);
- }
- }
二、Java类集合框架
在百度搜到的一个比较详细的java类集合笔记,链接如下:
http://wenku.baidu.com/view/52cf133f5727a5e9856a6186.html
最后,记录一个思考题目:采用Java类集合如何实现一个stack,使得增加、删除、获取最大值、最小值以及中值的时间操作效率相当。
- /**
- * @author Administrator
- *
- * @description 如何从java类集框架中选取适当的数据结构呢???
- * @history
- */
- public interface Stack<T> {
- public void add(T t); // 添加元素
- public void delete(T t); // 删除元素
- public T getMax(); // 获取最大值
- public T getMin(); // 获取最小值
- public T getMiddle(); // 获取第中间大值
- }
发表评论
-
MyEclipse配置(优化)
2011-12-27 17:26 1117MyEclipse配置 一 安 ... -
1.The Struts dispatcher cannot be found. This is usually caused by using Struts
2011-12-09 21:59 939异常分析:以上的配置及文件中,如果采用 http://i ... -
Java IO 编程
2011-12-08 21:28 0Java IO 编程 1、基本概念 Java中对文件的操 ... -
Java IO 编程
2011-12-08 21:20 0Java IO 编程 1、基本概念 Java中对文件的操 ... -
程序员装B指南
2011-08-23 21:32 779一、准备工作 “工欲善其事必先利其器。” 1.电脑不一定要配 ...
相关推荐
Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...
Java IO编程是Java开发中的重要组成部分,它负责处理输入(Input)和输出(Output)数据。在Java中,IO操作涉及到文件读写、网络通信、数据流管理等多个方面,是程序与外部世界交互的关键技术。本教程将通过视频形式...
总结一下,Java IO编程实例展示了如何利用`FileReader`类读取文本文件。通过理解流的分类、特性及其在Java中的应用,我们可以更有效地处理程序的输入/输出需求。无论是处理文件、网络数据还是内存中的数据,Java IO...
Java IO(输入/输出)是Java编程中用于处理数据流和实现数据读写的API集合。Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的...
Java IO(输入/输出)是Java编程语言中的一个重要部分,用于处理各种数据流,包括从文件、网络、设备等读取数据以及向这些地方写入数据。本案例将深入探讨Java IO流的基本概念、主要类库及其在实际编程中的应用。 ...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...
Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了一整套类库,使得开发者能够有效地读取和写入数据到不同的源和目标,如文件、网络、内存缓冲区等。Java IO体系结构设计得...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架,它提供了丰富的类库,使得程序能够与各种设备、文件、网络进行数据交互。然而,传统的IO模型在处理大量并发连接时表现出效率较低的问题,...
本篇文章将全面解析Java IO处理类,包括基本概念、常用类库、流的概念及分类,以及实际编程中的应用。 首先,Java IO体系基于流(Stream)的概念,流是数据的序列,可以是从输入源读取或向输出目标写入。Java IO提供...
在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种结构型设计模式,它...
JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...
在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...
Java流式IO编程是Java程序设计中的一种重要概念,用于实现数据的输入/输出操作。在Java中,把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream)。java.io包中定义了多个流类型(类或抽象类)...
Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许程序员在程序之间传输数据,包括从文件、网络、内存缓冲区到其他程序或系统组件。Java IO API是Java平台的...
总之,Java IO流是Java编程中不可或缺的一部分,理解和熟练使用IO流能够帮助我们更高效地处理数据输入和输出。通过实际的开发案例,我们可以更好地掌握这些概念,并将其应用于实际项目中,提升代码的效率和质量。
此外,Java NIO(New IO)是Java 1.4引入的一个新模块,提供了非阻塞IO操作,包括通道(Channel)、选择器(Selector)等,可以处理大量并发连接,尤其适用于网络编程。 在提供的压缩包文件"Io基础文档"中,可能...
总之,Java IO流是Java编程中不可或缺的一部分,它提供了丰富的类和方法来处理各种输入输出任务。通过深入学习和理解IO流,开发者可以更好地掌握数据的读取、写入和传输,提升程序的效率和功能。同时,熟悉相关工具...
Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...
Java IO(Input/Output)是Java编程中非常重要的一个领域,它主要用于数据的读取、写入和传输。Java IO提供了丰富的类库,使得开发者能够处理各种类型的输入输出任务,包括文件操作、网络通信、流处理等。在这个...