java学习笔记IO

时间:2023-02-25 21:16:32
Java学习笔记(I/O)
学习目标:
   一、 理解Java IO系统中概念及分类,把握它的整体思想,能够灵活运用。
学习内容

一、概念:Java中对文件的操作是以流的方式进行的。Java流是内存中一组有序数组序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将这些流写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。

二、Java流的分类:

1、按输入方向分:分为输入流和输出流。
2、按处理数据的单位分:分为字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char=2byte)。
3、按功能不同分:分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流,FileInputStream是一个接点流,可以直接从文件读取数据,但是BufferedInputStream可以包装FileInputStream,使得其有缓冲功能。
 除了这三种外,还有文件流、对象流、缓冲流等,其实这些类都是节点流和处理流的子分类。

三、流分类的关系

不管流的分类是多么复杂,其根源来自于四个基本的类。
                 字节流             字符流
输入流 InputStream       Reader
输出流 OutputStream    Writer
   
四、字节流和字符流的相互转换
 
1、从字节流到字符流:InputStreamReader、OutputStreamWriter类可以实现。
 
2、从字符流到字节流:可以从字符流中获取char[]数组,转换为String,然后调用String的API函数getBytes() 获取到byte[],然后就可以通过ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换。
下面是关于IO的两个程序:
package bytetest;

import java.io.*;

/**
* User: xiaohui
* Date: 2008-10-3022:44:04
*/

public class IOStreamTest {
        public static void main(String[] args) throws IOException {
                testBuffer();
        }

        public static void testIOStream() throws IOException {
                InputStream inputStream = new FileInputStream("C:\\观沧海.txt");
                OutputStream outputStream = new FileOutputStream("E:\\观沧海1.txt");
                int x;
                while ((x = inputStream.read()) != -1) {
                        outputStream.write(x);
                }
                inputStream.close();
                outputStream.close();
                System.out.println("文件复制成功!");
        }

        public static void testIOChar() throws IOException {
                Reader reader = new FileReader("C:\\观沧海.txt");
                Writer writer = new FileWriter("C:\\观沧海2.txt");
                int x;
                while ((x = reader.read()) != -1) {
                        writer.write(x);
                }
                reader.close();
                writer.close();
                System.out.println("文件复制成功!");
        }

        public static void testBuffer() throws IOException {
                BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\观沧海.txt"));
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:\\观沧海3.java"));
                String x;
                while ((x = bufferedReader.readLine()) != null) {
                        bufferedWriter.write(x+"\n");
                     System.out.println(x);
                }
                bufferedWriter.flush();
                bufferedWriter.close();
                bufferedReader.close();
        }
}
打印结果:
观沧海
东临碣石,以观沧海。
水何澹澹,山岛竦峙。
树木丛生,百草丰茂。
秋风萧瑟,洪波涌起。
日月之行,若出其中;
星汉灿烂,若出其里。
幸甚至哉,歌以咏志。

package bytetest;

import java.io.File;

/**
* User: xiaohui
* Date: 2008-10-3023:35:02
*/

public class TestFile {
        public static void main(String[] args) {
                File file = new File("C:\\aaa\\观沧海3.java");
                System.out.println(File.pathSeparator);
                System.out.println(File.pathSeparatorChar);
                System.out.println(File.separator);
                System.out.println(File.separatorChar);
                String s = "C:"+File.separator+"观沧海.txt";
                File file1 = new File(s);
                System.out.println(file1.getPath());
                file.delete();
                String x = "AAA"+" "+"BBB"+"\n"+"DDD";
                System.out.println(x);

                File file3 = new File("C:\\aaa\\bbb");
                file3.mkdir();

        }
}
打印结果: ;
;
\
\
C:\观沧海.txt
AAA BBB
DDD

本文出自 “Java初学者” 博客,谢绝转载!