Java 流(Stream)、文件(File)和IO

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

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

读取控制台输入

Java 的控制台输入由 System.in 完成。

为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。

下面是创建 BufferedReader 的基本语法:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

从控制台读取多字符输入

从 BufferedReader 对象读取一个字符要使用 read() 方法.

实例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BRRead {
    public static void main(String[] args) throws IOException{
        char c;
        // 使用System.in 创建 BufferedReader
        BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
        System.out.println("输出字符, 按下‘q’键结束。");

        // 读取字符
        do {
            c = (char)br.read();
            System.out.println(c);
        }while (c != 'q');
    }
}

运行如下:

输出字符, 按下‘q’键结束。
fanqie
f
a
n
q

Process finished with exit code 0

从控制台读取字符串

从标准输入读取一个字符串需要使用 BufferedReader 的 readLine() 方法。

实例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BRReadLines {
    public static void main(String[] args) throws IOException{
        //使用使用 System.in 创建 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        System.out.println("Enter lines of text, Enter the 'end' to quit");
        do {
            str = br.readLine();
            System.out.println(str);
        }while (!str.equals("end")); // 判断字符串是否相等使用equals()函数
    }
}

运行如下:

Enter lines of text, Enter the 'end' to quit
fanqie
fanqie
end
end

Process finished with exit code 0

FileInputStream

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

1、可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

InputStream f = new FileInputStream("C:/java/hello");

2、也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);

创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。

FileOutputStream

该类用来创建一个文件并向文件中写数据。

如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

有两个构造方法可以用来创建 FileOutputStream 对象。

1、使用字符串类型的文件名来创建一个输出流对象:

OutputStream f = new FileOutputStream("C:/java/hello")

2、也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

创建OutputStream 对象完成后,就可以使用下面的方法来写入流或者进行其他的流操作。

下面是一个演示 InputStream 和 OutputStream 用法的例子:

import java.io.*;

public class FileStreamTest {
    public static void main(String[] args) throws IOException{
        // 构建FileOutputStream对象,文件不存在会自动新建
        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);

        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");

        // 写入到缓冲区
        writer.append("爱吃西瓜的番茄酱");

        // 换行
        writer.append("
");

        // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
        writer.close();

        // 关闭输出流,释放系统资源
        fop.close();

        // 构建FileInputStream对象
        FileInputStream fip = new FileInputStream(f);

        // 构建InputStreamReader对象,编码与写入相同
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");

        StringBuffer sb = new StringBuffer();
        while (reader.ready()){
            sb.append((char) reader.read());
            // 转成char加到StringBuffer对象中
        }
        System.out.println(sb.toString());
        reader.close(); // 关闭读取流

        fip.close();  // 关闭输入流,释放系统资源
    }
}

运行结果:

爱吃西瓜的番茄酱

创建目录

File类中有两个方法可以用来创建文件夹:

  • mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。

  • mkdirs()方法创建一个文件夹和它的所有父文件夹。

实例:

import java.io.File;
 
public class CreateDir {
    public static void main(String args[]) {
        String dirname = "/tmp/user/java/bin";
        File d = new File(dirname);
        // 现在创建目录
        d.mkdirs();
    }
}

读取目录

一个目录其实就是一个 File 对象,它包含其他文件和文件夹。

如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。

可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。

实例:

import java.io.File;

public class DirList {
    public static void main(String[] args){
        String dirname = "./src";
        File f = new File(dirname);
        if (f.isDirectory()){
            System.out.println("目录:"+ dirname);
            String s[] = f.list();
            for (int i=0; i<s.length; i++){
                File f1 = new File(dirname+ "/"+s[i]);
                if (f1.isDirectory()){
                    System.out.println(s[i] + " 是一个目录");
                }
                else {
                    System.out.println(s[i] + " 是一个文件");
                }
            }
        }
        else {
            System.out.println(dirname + " 不是一个目录");
        }
    }
}

输出;

目录:./src
BRRead.java 是一个文件
BRReadLines.java 是一个文件
CommandLine.class 是一个文件
CommandLine.java 是一个文件
CreateDir.java 是一个文件
DateDemo.java 是一个文件
DirList.java 是一个文件
Employee.java 是一个文件
FileStreamTest.java 是一个文件
FinalizationDemo.java 是一个文件
hello.java 是一个文件
InstanceCounter.java 是一个文件
PrimitiveTypeTest.java 是一个文件
Puppy.java 是一个文件
RegexExample1.java 是一个文件
RegexMatches.java 是一个文件
SleepDemo.java 是一个文件
StringDemo.java 是一个文件
Test.java 是一个文件
TestArray.java 是一个文件
TestMax.java 是一个文件
TestVoidMethod.java 是一个文件
VarargsDemo.java 是一个文件
WriteDemo.java 是一个文件

Process finished with exit code 0

删除目录或文件

删除文件可以使用 File.delete() 方法。

删除目录使用 deleteFolder(f)方法。

每天学习一点点,每天进步一点点。

原文地址:https://www.cnblogs.com/youcoding/p/12701837.html