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

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

注:以下所述作为笔记以供复阅
		或有谬误,需自察
文中有很多引用自:http://www.runoob.com/java/java-files-io.html
				https://www.w3cschool.cn/java/java-files-io.html

输入流与输出流的类层次图

在这里插入图片描述

常见方法

int read() throws IOException

从BufferedReader对象读取一个字符可使用read()方法。该方法从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回-1。该方法抛出IOException。

String readLine() throws IOException

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

int available() throws IOException

属于InputStream对象的方法,返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。

从控制台读取多字符输入

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

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

下面的程序示范了用 read() 方法从控制台不断读取字符直到用户输入 “q”。

//使用 BufferedReader 在控制台读取字符

import java.io.*;
 
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' 键退出。");
        // 调用read()方法读取字符
        do {
            c = (char) br.read();
            System.out.println(c);
        } while (c != 'q');
    }
}

从控制台读取字符串

下面的程序读取和显示字符行直到输入了单词"end"。

//使用 BufferedReader 在控制台读取字符串
import java.io.*;
 
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("输入字符串:");
        System.out.println("输入 end 退出");
        do {
        //从标准输入读取一个字符串需要使用 BufferedReader 的 readLine() 方法
            str = br.readLine();
            System.out.println(str);
        } while (!str.equals("end"));
    }
}

使用FileInputStream从文件读取数据

有多种构造方法可用来创建inputStream对象。
方法一:使用字符串类型的文件名来创建一个输入流对象来读取文件

InputStream inputf = new FileInputStream("C:/appWorkspace/eclipseWorkSpace/LeetCode/src/tools/test.txt");

方法二:首先使用 File() 方法来创建一个文件对象,然后使用该文件对象来创建一个输入流对象来读取文件。

File f = new File("C:/appWorkspace/eclipseWorkSpace/LeetCode/src/tools/test.txt");
InputStream inputf1 = new FileInputStream(f);

以下程序从test.txt按字符读取文本数据

	public static void main(String[] args) throws IOException{
			File f = new File("C:/appWorkspace/eclipseWorkSpace/LeetCode/src/tools/test.txt");
		InputStream inputf1 = new FileInputStream(f);
		//available()返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。
		int size = inputf.available();     
        for (int i = 0; i < size; i++) {
        //read()从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。
            System.out.print((char) inputf.read() + "  ");
        }
        //使用close()关闭次文件输入流并释放与此流有关的所有系统资源
        inputf.close();
        }

使用FileOutputStream创建一个文件并向文件中写入数据

有多种构造方法可用来创建outputStream对象。
方法一:使用字符串类型的文件名来创建一个输出流对象来创建文件和或读取文件

FileOutputStream outputf = new FileOutputStream("C:/appWorkspace/eclipseWorkSpace/LeetCode/src/tools/test1.txt");

方法二:首先使用 File() 方法来创建一个文件对象,然后使用该文件对象来创建一个输出流对象来创建文件和或读取文件

File f = new File("C:/appWorkspace/eclipseWorkSpace/LeetCode/src/tools/test2.txt");
FileOutputStream outputf1 = new FileOutputStream(f);

以下程序在当前目录下创建一个test2.txt文件并向其中写入“中文输入”这个字符串


		File f = new File("C:/appWorkspace/eclipseWorkSpace/LeetCode/src/tools/test2.txt");
		FileOutputStream outputf1 = new FileOutputStream(f);
		
		OutputStreamWriter writer = new OutputStreamWriter(outputf1,"UTF-8");
		writer.append("中文输入");
		writer.close();
		outputf1.close();

以下程序使用FileOutputStream对象创建文件,用OutputStreamWriter对象向文件中写入数据,用InputStreamReader对象读取文件数据

import java.io.*;
 
public class fileStreamTest2 {
    public static void main(String[] args) throws IOException {
 
        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);
        // 构建FileOutputStream对象,文件不存在会自动新建
 
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
 
        writer.append("中文输入");
        // 写入到缓冲区
 
        writer.append("\r\n");
        // 换行
 
        writer.append("English");
        // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
 
        writer.close();
        // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
 
        fop.close();
        // 关闭输出流,释放系统资源
 
        FileInputStream fip = new FileInputStream(f);
        // 构建FileInputStream对象
 
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        // 构建InputStreamReader对象,编码与写入相同
 
        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
            sb.append((char) reader.read());
            // 转成char加到StringBuffer对象中
        }
        System.out.println(sb.toString());
        reader.close();
        // 关闭读取流
 
        fip.close();
        // 关闭输入流,释放系统资源
 
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值