Java I/O系列笔记

(会经常用到的网址:Java API。请提前打开,方便查阅)

1. 基本概念

  Stream:流。一个流可以理解为一个数据的序列,就像水流一样,是有序进行的。输入流表示从源(Source)读取的数据序列,输出流表示向一个目标写入的数据序列。

  File:文件。Java中的File是文件和目录路径名的抽象表示形式。 用户界面和操作系统使用与系统相关的 路径名字符串  来命名文件和目录。

  I/O:Input/Output,输入/输出。Java里的I/O包含了一系列的包和类,详见:Java API中的java.io。输入与输出的概念,都是具有相对性的。Java中的输入输出都是针对Java应用程序的。Java程序读取文件,对于Java应用程序来说是输入,因此使用的是输入相关的类,如InputStreamReader、FileReader等;Java程序将数据写入文件,对于Java应用程序来说是输出,因此使用的是输出相关的类,如OutputStreamWriter、FileWriter等。

  在使用java.io里的所有类时,都需要抛出IOException异常。

2. 控制台与I/O

控制台输入(Input)

  声明一个控制台的BufferedReader:BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  br的read()方法可以从控制台读取输入的一个字符,readLine()方法可以从控制台读取输入的一行字符(包括空格)。

  使用方法:char c = (char) br.read(); String str = br.readLine();

控制台输出(Output)

  使用System.out.print()和System.out.println()都可以实现往控制台输出。这些方法都由类 PrintStream 定义,System.out 是该类对象的一个引用。 PrintStream 继承了 OutputStream类,并且实现了方法 write(),因write()方法 也可以用来往控制台进行写操作。

  使用方法:System.out.write(' 输出的内容 ');

3. 文件与I/O

  上图是描述输入流和输出流的类层次图。

  字节流与字符流的区别:字节流处理的基本单位为字节(1byte, 8bits),常用来处理二进制数据,但实际可以处理任何类型的数据(不支持直接写入或读取Unicode码元),默认不使用缓冲区。字符流处理的基本单元为Unicode代码单元(2byte, 16bits),常用于处理文本数据,支持读写Unicode码元,需要使用缓冲区。Unicode代码单元的范围是0x0000~0xFFFF。Java中的String类型默认就把字符以Unicode规则编码而后存储在内存中。

字符流的工作方式

  输出字符流:将要写入文件的字符序列(实际是Unicode码序列)转为指定编码方式下的字节序列,然后再写入到文件中;

  输入字符流:将要读取的字节序列按指定编码方式解码为相应字符序列(实际是Unicode码序列),从而可以存在内存中。

(摘自:理解java中字符流与字节流的区别

文件——File类

  主要用于文件和目录的创建、文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。File类具有 3 个字段和 4 种构造方法,详见Java API - java.io.File。

字符流文件读取——FileReader

  FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。FileReader用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。 具有 3 种构造方法,多种用于文件读取的方法。详见Java API - java.io. FileReader。

字符流文件写入——FileWriter

  FileWriter 类从 OutputStreamWriter 类继承而来。该类按字符向流中写入数据。FileWriter 用于写入字符流,要写入原始字节流,请考虑使用 FileOutputStream。 具有 5 种构造方法和多种用于文件写入的方法。详见Java API - java.io. FileWriter。

字节流文件读取——FileInputStream

  用于从文件读取数据,它的对象可以用关键字 new 来创建,具有三种构造方法和多种可用方法,详见Java API - java.io. FileInputStream。

字节流文件写入——FileOutputStream

  用来创建一个文件并向文件中写数据。如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。该类共有4种构造方法和多种写文件的方法,详见Java API - java.io. FileOutputStream。

4. Java中的目录操作

创建目录

创建一个目录:

  String dirName = "/temp";

  File file = new File(dirName);

  file.mkdir();

创建整个路径的目录:

  String dirsName = "/tmp/user/java/bin";

  File = new File(dirsName);

  file.mkdirs();

读取目录

  读取目录时,需要使用isDirectory()方法来判断是否是目录,如果是,则可以进入该目录下读取该目录下的目录。下面的代码用于读取一个目录下的所有目录及文件:

import java.io.File;

public class Main {

    public static void main(String[] args) {
        Main m = new Main();
        m.run();
    }

    public void run(){
        String dir = "D:/STUDY/2016-2017第一学期";
        readDirsNames(dir, "");
    }

    public void readDirsNames(String dir, String white){
        File file = new File(dir);//创建当前文件
        String[] filenames;//保存当前目录下所有文件的名称
        if (file.isDirectory()){//如果当前文件是目录
            white = white +"\t";
            System.out.println( white + "目录:" + file.getName());//输出
            filenames = file.list();
            for (int i = 0; i < filenames.length; i++) {
                String currentDir = dir + "/" + filenames[i];
                readDirsNames(currentDir, white);
            }
        }else {
            white = white +"\t";
            System.out.println(white + "文件:" +  file.getName());
        }
    }
}

删除目录

  删除的目录下不能有文件,即Java只能删除空目录,因此在删除一个目录树的时候,必须从目录树的叶开始删除。删除使用的方法是File.delete(),与删除文件使用的方法是一样的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值