`

一、Java IO 编程

 
阅读更多

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、代码模拟实战 

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.io.IOException;  
  3.   
  4. public class FileDemoTest {  
  5.     /** 
  6.      * @description 基础File类操作 
  7.      * @param args 
  8.      * @throws IOException IO异常处理 
  9.      */  
  10.     public static void main(String[] args) throws IOException {  
  11.         // Windows系统下的文件目录格式,这个和Unix系统等不同  
  12.         // String pathSeparator = File.pathSeparator; // ;  
  13.         // String separator = File.separator; // \  
  14.   
  15.         // 1、创建和删除文件  
  16.         File file = new File("d:\\helloworld.txt");  
  17.         // File file = new File("d:"+File.separator+"helloworld.txt");  
  18.         file.createNewFile(); // 创建文件  
  19.         if (file.exists()) { // 如果文件存在,则删除文件  
  20.             file.delete();  
  21.         }  
  22.   
  23.         // 2、创建文件夹操作  
  24.         File file2 = new File("d:\\helloworld");  
  25.         // File file2 = new File("d:"+File.separator+"helloworld");  
  26.         file2.mkdir(); // 建立文件夹  
  27.         if (file2.isDirectory()) {  
  28.             System.out.println("hello-directory"); // 判断是否是目录  
  29.         }  
  30.   
  31.         // 3、遍历文件或者文件夹操作  
  32.         File file3 = new File("d:\\");  
  33.         // File file3 = new File("d:"+File.separator);  
  34.         File files[] = file3.listFiles(); // 列出全部内容  
  35.         for (int i = 0; i < files.length; i++) {  
  36.             System.out.println(files[i]);  
  37.         }  
  38.     }  
  39. }  

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.io.FileInputStream;  
  5.   
  6. public class InputStreamDemo {  
  7.     /** 
  8.      * @description 字节流:输入流InputStream 
  9.      * @param args 
  10.      * @throws IOException 
  11.      */  
  12.     public static void main(String[] args) throws IOException {  
  13.         // 字节流的输入流和输出流过程步骤比较固定  
  14.         // 第1步、使用File类找到一个文件  
  15.         File f = new File("d:" + File.separator + "helloworld.txt");  
  16.         // 第2步、通过子类实例化父类对象(InputStream为抽象类,本身不能直接实例化)  
  17.         InputStream input = new FileInputStream(f);  
  18.         // 第3步、进行读操作  
  19.         byte b[] = new byte[(int)f.length()]; // 数组大小由文件大小来确定  
  20.         for (int i = 0; i < b.length; i++) {  
  21.             b[i] = (byte) input.read(); // 读取内容  
  22.         }  
  23.         // 第4步、关闭输出流  
  24.         input.close();   
  25.     }  
  26. }  

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.io.IOException;  
  3. import java.io.OutputStream;  
  4. import java.io.FileOutputStream;  
  5.   
  6. public class OutputStreamDemo {  
  7.     /** 
  8.      *@description 字节流:输出流OutputStream类 
  9.      *@param args 
  10.      *@throws IOException  
  11.      */  
  12.     public static void main(String[] args) throws IOException {  
  13.         // 输入和输出流参考的是Java程序,输出流操作步骤也比较固定  
  14.         // 第1步、使用File类找到一个文件  
  15.         File f = new File("d:" + File.separator + "helloworld.txt");  
  16.         // 第2步、通过子类实例化父类对象  
  17.         //OutputStream out = new FileOutputStream(f);  
  18.         OutputStream out = new FileOutputStream(f,true);  
  19.         // 第3步、进行写操作  
  20.         String str = "say hello world!!!";  
  21.         byte b[] = str.getBytes();  
  22.         for(int i=0;i<b.length;i++){   
  23.             out.write(b[i]); // 单个写入  
  24.         }  
  25.         // out.write(b);  
  26.         // 重载方法write  
  27.         // public abstract void write(int b) throws IOException;  
  28.         // public void write(byte b[]) throws IOException {}  
  29.         // 第4步、关闭输出流  
  30.         out.close(); // 关闭输出流  
  31.     }  
  32. }  

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.io.IOException;  
  3. import java.io.Reader;  
  4. import java.io.FileReader;  
  5.   
  6. public class ReaderDemo {  
  7.     /** 
  8.      *@description 字节流和字符流按照处理数据的单位划分 
  9.      *@param args 
  10.      *@throws IOException IO异常处理 
  11.      */  
  12.     public static void main(String[] args) throws IOException {  
  13.         // 第1步、使用File类找到一个文件  
  14.         File f = new File("d:" + File.separator + "helloworld.txt");  
  15.         // 第2步、通过子类实例化父类对象  
  16.         Reader input = new FileReader(f);  
  17.         // 第3步、进行读操作  
  18.         char c[] = new char[1024];  
  19.         int temp = 0;  
  20.         int len = 0;  
  21.         while ((temp = input.read()) != -1) {  
  22.             // 如果不是-1就表示还有内容,可以继续读取  
  23.             c[len] = (char) temp;  
  24.             len++;  
  25.         }  
  26.         // 第4步、关闭输出流  
  27.         input.close();  
  28.     }  
  29. }  

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.io.IOException;  
  3. import java.io.Writer;  
  4. import java.io.FileWriter;  
  5.   
  6. public class WriterDemo {  
  7.     /** 
  8.      *@description 通过代码学习发现,基本上步骤一致的 
  9.      *@param args 
  10.      *@throws IOException 
  11.      */  
  12.     public static void main(String[] args) throws IOException {  
  13.         // 第1步、使用File类找到一个文件  
  14.         File f = new File("d:" + File.separator + "helloworld.txt");  
  15.         // 第2步、通过子类实例化父类对象  
  16.         Writer out = new FileWriter(f); // 通过对象多态性,进行实例化  
  17.         // 第3步、进行写操作  
  18.         String str = "\nsay hello\tworld";   
  19.         out.write(str);   
  20.         // 第4步、关闭输出流  
  21.         // out.flush(); // 清空缓冲  
  22.         out.close(); // 关闭输出流  
  23.           
  24.         // 另外有缓冲功能的类为:BufferedReader  
  25.     }  
  26. }  

Java代码  收藏代码
  1. import java.io.ByteArrayInputStream;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8. import java.io.OutputStreamWriter;  
  9. import java.io.Reader;  
  10. import java.io.Writer;  
  11.   
  12. public class ByteAndCharStreamTest {  
  13.     /** 
  14.      *@description  字节流:InputStream,OutputStream 
  15.      *              字符流:Reader,Writer   
  16.      *              // 字节流和字符流相互转换测试 
  17.      *@param args 
  18.      * @throws IOException 文件操作异常处理 
  19.      */  
  20.     public static void main(String[] args) throws IOException {  
  21.         // 1、输入流-字节流转换成字符流  
  22.         // 通过InputStreamReader类来进行转换  
  23.         InputStream is = new FileInputStream("d:\\helloworld.txt");  
  24.         Reader reader = new InputStreamReader(is); // 将字节流转换成字符流  
  25.         char c[] = new char[1024];  
  26.         int len = reader.read(c); // 读取操作,保存在字符数组中  
  27.         reader.close(); // 关闭操作  
  28.         System.out.println(new String(c,0,len)); // 字符数组转换成String类实例  
  29.           
  30.         // 2、输出流-字节流转换成字符流  
  31.         // 通过OutputStreamWriter类来进行转换  
  32.         File f = new File("d:" + File.separator + "helloworld.txt");  
  33.         Writer out = new OutputStreamWriter(new FileOutputStream(f)); // 字节流变为字符流  
  34.         out.write("hello world!!!"); // 使用字符流输出  
  35.         out.close();  
  36.           
  37.         // 3、从字符流到字节流转换可以采用String类提供的操作  
  38.         // 从字符流中获取char[],转换成String实例然后再调用String API的getBytes()方法   
  39.         // 接1中的代码如下,最后通过ByteArrayInputStream即可完成操作  
  40.         String str = new String(c,0,len);  
  41.         byte b[] = str.getBytes();  
  42.         InputStream is2 = new ByteArrayInputStream(b);  
  43.         is2.close();  
  44.           
  45.         // 4、其他常见的流  
  46.         // 内存操作流ByteArrayInputStream,ByteArrayOutputStream  
  47.         // 管道流PipedOutputStream,PipedInputStream  
  48.         // 打印流PrintStream  
  49.         // 缓存流BufferedReader  
  50.         // ...等等  
  51.     }  
  52. }  

Java代码  收藏代码
  1. import java.io.FileOutputStream;  
  2. import java.io.IOException;  
  3. import java.io.OutputStream;  
  4.   
  5. public class CharSetDemo {  
  6.     /** 
  7.      * @description 字符编码学习测试方法 
  8.      * @param args 
  9.      * @throws IOException 文件IO异常处理 
  10.      */  
  11.     public static void main(String[] args) throws IOException {  
  12.         // 1、字符编码,通过system类来获取  
  13.         String fe = System.getProperty("file.encoding");  
  14.         System.out.println(fe); // GBK  
  15.           
  16.         // 2、进行转码操作  
  17.         OutputStream out = new FileOutputStream("d:\\helloworld.txt");  
  18.         byte b[] = "Java,你好!!!".getBytes("ISO8859-1"); // 转码操作  
  19.         out.write(b); // 保存  
  20.         out.close(); // 关闭  
  21.     }  
  22. }  

Java代码  收藏代码
  1. import java.io.FileInputStream;  
  2. import java.io.FileOutputStream;  
  3. import java.io.InputStream;  
  4. import java.io.ObjectInputStream;  
  5. import java.io.OutputStream;  
  6. import java.io.ObjectOutputStream;  
  7. import java.io.Serializable;  
  8.   
  9. class Demo implements Serializable{ // 实现序列化接口  
  10.     // 序列化方式之一,Java自身提供的序列化支持  
  11.     // 其他序列化方式,待以后有需要进一步学习  
  12.     private static final long serialVersionUID = 1L;  
  13.     private String info; // 定义私有属性  
  14.       
  15.     // 如果某个属性不想被序列化,采用transient来标识  
  16.     //private transient String noser;   
  17.       
  18.     public Demo(String info){  
  19.         this.info = info;  
  20.     }  
  21.     public String getInfo() {  
  22.         return info;  
  23.     }  
  24.     public void setInfo(String info) {  
  25.         this.info = info;  
  26.     }  
  27.     public String toString() {  
  28.         return "info = " + this.info;  
  29.     }  
  30. }  
  31. public class SerializedDemo {  
  32.     /** 
  33.      *@description 对象序列化、反序列化操作 
  34.      *@param args 
  35.      *@throws Exception 
  36.      */  
  37.     public static void main(String[] args) throws Exception {  
  38.         // 1、对象序列化是将内存中的对象转换成二进制形式的数据流  
  39.         // 2、对象反序列化刚好和对象序列化方向相反,将二进制数据流转换成对象  
  40.           
  41.         // a、对象序列化采用ObjectOutputStream类  
  42.         ObjectOutputStream oos = null// 声明对象输出流  
  43.         OutputStream out = new FileOutputStream("d:\\helloworld.txt");   
  44.         oos = new ObjectOutputStream(out);  
  45.         oos.writeObject(new Demo("helloworld"));  
  46.         oos.close();  
  47.           
  48.         // b、对象反序列化采用ObjectInputStream类  
  49.         ObjectInputStream ois = null// 声明对象输入流  
  50.         InputStream input = new FileInputStream("d:\\helloworld.txt");  
  51.         ois = new ObjectInputStream(input); // 实例化对象输入流  
  52.         Object obj = ois.readObject(); // 读取对象  
  53.         ois.close();  
  54.         System.out.println(obj);  
  55.     }  
  56. }  

二、Java类集合框架 
在百度搜到的一个比较详细的java类集合笔记,链接如下: 
http://wenku.baidu.com/view/52cf133f5727a5e9856a6186.html 
最后,记录一个思考题目:采用Java类集合如何实现一个stack,使得增加、删除、获取最大值、最小值以及中值的时间操作效率相当。 
Java代码  收藏代码
  1. /** 
  2.  * @author Administrator 
  3.  *  
  4.  * @description 如何从java类集框架中选取适当的数据结构呢??? 
  5.  * @history 
  6.  */  
  7. public interface Stack<T> {  
  8.     public void add(T t); // 添加元素  
  9.     public void delete(T t); // 删除元素  
  10.     public T getMax(); // 获取最大值  
  11.     public T getMin(); // 获取最小值  
  12.     public T getMiddle(); // 获取第中间大值  
  13. }  
<!--EndFragment-->
分享到:
评论

相关推荐

    Java IO 编程集合

    Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...

    Java-Java IO编程教程

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

    java IO 编程实例

    总结一下,Java IO编程实例展示了如何利用`FileReader`类读取文本文件。通过理解流的分类、特性及其在Java中的应用,我们可以更有效地处理程序的输入/输出需求。无论是处理文件、网络数据还是内存中的数据,Java IO...

    Java IO应届生培训讲义

    Java IO(输入/输出)是Java编程中用于处理数据流和实现数据读写的API集合。Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的...

    java io案例

    Java IO(输入/输出)是Java编程语言中的一个重要部分,用于处理各种数据流,包括从文件、网络、设备等读取数据以及向这些地方写入数据。本案例将深入探讨Java IO流的基本概念、主要类库及其在实际编程中的应用。 ...

    Java IO知识点

    Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...

    java io 结构图

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了一整套类库,使得开发者能够有效地读取和写入数据到不同的源和目标,如文件、网络、内存缓冲区等。Java IO体系结构设计得...

    Java IO_NIO

    Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架,它提供了丰富的类库,使得程序能够与各种设备、文件、网络进行数据交互。然而,传统的IO模型在处理大量并发连接时表现出效率较低的问题,...

    Java IO处理类的汇总

    本篇文章将全面解析Java IO处理类,包括基本概念、常用类库、流的概念及分类,以及实际编程中的应用。 首先,Java IO体系基于流(Stream)的概念,流是数据的序列,可以是从输入源读取或向输出目标写入。Java IO提供...

    Java IO 与 装饰模式

    在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种结构型设计模式,它...

    JavaIO流详解归纳.pdf

    JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    java小项目练习IO实现

    在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...

    JAVA程序设计:第14章 Java流式IO编程.ppt

    Java流式IO编程是Java程序设计中的一种重要概念,用于实现数据的输入/输出操作。在Java中,把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream)。java.io包中定义了多个流类型(类或抽象类)...

    java io.pdf

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许程序员在程序之间传输数据,包括从文件、网络、内存缓冲区到其他程序或系统组件。Java IO API是Java平台的...

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

    总之,Java IO流是Java编程中不可或缺的一部分,理解和熟练使用IO流能够帮助我们更高效地处理数据输入和输出。通过实际的开发案例,我们可以更好地掌握这些概念,并将其应用于实际项目中,提升代码的效率和质量。

    javaIo操作的基础代码

    此外,Java NIO(New IO)是Java 1.4引入的一个新模块,提供了非阻塞IO操作,包括通道(Channel)、选择器(Selector)等,可以处理大量并发连接,尤其适用于网络编程。 在提供的压缩包文件"Io基础文档"中,可能...

    java io流学习笔记1

    总之,Java IO流是Java编程中不可或缺的一部分,它提供了丰富的类和方法来处理各种输入输出任务。通过深入学习和理解IO流,开发者可以更好地掌握数据的读取、写入和传输,提升程序的效率和功能。同时,熟悉相关工具...

    JAVA IO流技术

    Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...

    Java io的基本操作很全面的代码呀

    Java IO(Input/Output)是Java编程中非常重要的一个领域,它主要用于数据的读取、写入和传输。Java IO提供了丰富的类库,使得开发者能够处理各种类型的输入输出任务,包括文件操作、网络通信、流处理等。在这个...

Global site tag (gtag.js) - Google Analytics