Java学习笔记之:Java 流

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记之:Java 流相关的知识,希望对你有一定的参考价值。

一、介绍

Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

Java.io包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

二、笔记

1.IO

import java.io.File;

/**
 * IO流 1.File类:可以操作指定路径的文件,提供了对文件的增删改查
 * 
 * 
 *
 */
public class IO {
    public static void main(String[] args) {
        try {
            //test();
            new IO().check("D:\\    ");
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

    public static void test() throws Exception {
        String path = "D:\\xx;
        // 查看文件
        // 获取文件路径方法(在网络路径中才能看出效果)
        File file = null;
        file = new File(path);
        // System.out.println(file.getAbsolutePath());
        //
        // String[] names = file.list();
        // for (String string : names) {
        // System.out.println(string);
        // }

        // 获取当前路径下的所有的文件的文件对象
        // File[] files=file.listFiles();
        // for (File f : files) {
        // System.out.println(f.getPath());
        // System.out.println(f.getParent());
        // }

        // 创建文件
        // path+="\\a.txt";
        // file=new File(path);
        // boolean result=file.createNewFile();
        // System.out.println(result);

        // 创建文件夹
        // path+="\\text";
        // file=new File(path);
        // boolean result=file.mkdir();
        // System.out.println(result);

        // 递归创建文件夹
        // path += "\\text\\abc";
        // file = new File(path);
        // boolean result = file.mkdirs();
        // System.out.println(result);

        // 重命名,并移动路径
        path += "\\abc.txt";
        file = new File(path);
        file.renameTo(new File("D:\\xx\\abcd.txt"));
    }

    public void check(String path) {
        File file = new File(path);
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                System.out.println(f.getAbsolutePath());
            }
            else {
                check(f.getAbsolutePath());
            }
        }
    }

}

2.stream

/**
 * 流:可以理解数据的滚动,就是一个数据流 
1.按方向分(程序员角度):输入流,输出流 
2.按处理单位:字节流(OutputStream,InputStream的子类都是字节流),字符流 
3.按功能:节点流,
 * 
 *
 *
 */
public class Stream {

    public static void main(String[] args) {

        try {
            // file();
            // byteArray();
            obj();
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

    public static void file() {
        try {
            FileInputStream inputStream = new FileInputStream(new File(
                    "D:\\xx\\abcd.txt"));
            FileOutputStream outputStream = new FileOutputStream(
                    "D:\\xx\\a.txt");
            byte[] bs = new byte[10];
            int len = 0;
            while ((len = inputStream.read(bs)) != -1) {
                // String msg = new String(bs, 0, len);
                // System.out.println(msg);

                outputStream.write(bs, 0, len);
            }
            inputStream.close();
            outputStream.close();
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

    /**
     * 字节数组流是最小单位的流,一般处理不了的都可以用它
     * 
     * @throws IOException
     */
    public static void byteArray() throws IOException {

        String string = "ABCDEFG";
        byte[] bs = string.getBytes();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ByteArrayInputStream inputStream = new ByteArrayInputStream(bs);

        int len = 0;
        byte[] r = new byte[2];
        // while ((len=inputStream.read())!=-1) {//默认的读取方法,每次读取一个字节
        while ((len = inputStream.read(r)) != -1) {
            String msgString = new String(r, 0, len);
            System.out.println(msgString);
        }

    }

    // 对象流
    public static void obj() throws Exception {
        ObjectOutputStream outputStream = new ObjectOutputStream(
                new FileOutputStream("D:\\博客\\a.txt"));
        User user = new User(20, "tom");
        outputStream.writeObject(user);// 如果需要将一个对象写入到流中,需要实现
        outputStream.flush();
        outputStream.close();
        System.out.println("ok");
        ObjectInputStream inputStream = new ObjectInputStream(
                new FileInputStream("D:\\xx\\a.txt"));
        Object object = inputStream.readObject();
        if (object instanceof User) {
            System.out.println(((User) object).getName());
            System.out.println(((User) object).getAge());
        }
    }

    // 字符串缓冲流
    public static void stringBuffer() throws Exception {
        StringBufferInputStream inputStream = new StringBufferInputStream("ABCDE");
        int len = 0;
        byte[] bs = new byte[1024];
        while ((len = inputStream.read(bs)) != -1) {
             String msg = new String(bs, 0, len);
         System.out.println(msg);

        }
    }
}

3.字符流

/**
 * 字符流:只能处理文字类文件,不能处理图片 
 * 总结 
 * 1.输入流 输出流
 * 2.字节流(OutputStream,InputStream的子类都是字节流)
 * 字符流(reader和writer的子类) 
 * 3.按功能:节点流和处理刘
 * 
 * 
 *
 */
public class CharacterStream {

    public static void main(String[] args) {
        try {
            file();
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

    public static void file() throws Exception {

        FileReader reader = new FileReader(new File("D:\\xx\\abcd.txt"));
        FileWriter writer = new FileWriter(new File("D:\\xx\\abcd.txt"));
        // while (reader.ready()) {
        // System.out.println(reader.read());
        // }

        int len = 0;
        char[] cs = new char[1024];
        while ((len = reader.read(cs)) != -1) {
            System.out.println(new String(cs, 0, len));

        }
        reader.close();
    }

    public static void buffer() throws Exception {
        BufferedReader reader = new BufferedReader(new FileReader(
                "D:\\xx\\abcd.txt"));
        BufferedWriter writer = new BufferedWriter(new FileWriter(
                "D:\\xx\\abcd.txt"));
        int len = 0;
        char[] cs = new char[1024];
        while ((len = reader.read(cs)) != -1) {
            writer.write(cs, 0, len);
        }
        while (reader.ready()) {
            System.out.println(reader.readLine() + "|||");
            writer.write(reader.readLine());
        }
        reader.close();
        writer.close();
    }
}

 

以上是关于Java学习笔记之:Java 流的主要内容,如果未能解决你的问题,请参考以下文章

java学习笔记之字符流文件复制

Java学习笔记之 IO包 字节流

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

Java学习笔记之三十四超详解Java多线程基础

java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段

Java之I/O流