7.输入与输出

输入与输出

输入输出流

对于数据源(文件、程序、数据库)和程序来说,程序从数据源中获取数据,称为输入流,即read;数据源从程序获得数据,称为输出流,即write。抽象类InputStreamOutputStream构成了输入输出类层次结构

读写字节

使用InputStream的子类FileInputStreamOutputStream的子类FileOutputStream,这些子类又被称为字节流

int read()从数据源中读入一个字节,并返回该字节。当碰到输入流的结尾时返回-1

public void inputTest throws IOException {
    FileInputStream fileInputStream = new FileInputStream("文件路径");
    // 这里的文件路径既可以是相对路径也可以是绝对路径
    int by = 0;
    while (by = fileInputStream.read() != 1) {
        System.out.print((char)by);
    }
    fileInputStream.close();
}

byte[] readAllBytes()产生一个数组,包含可以从当前流中读入的所有字节

public void inputTest throws IOException {
    FileInputStream fileInputStream = new FileInputStream("文件路径");
    byte[] bytes;
    bytes = fileInputStream.readAllBytes();
    for (int i = 0; i < bytes.length; i++) {
        System.out.print((char) bytes[i]);
    }
}

void write(byte[] b)写入所有字节的数据到字符数组b中

public void outputTest() throws IOException {
    FileOutputStream fileOutputStream = new FileOutputStream("file\\2.txt");
    byte[] bytes = "BiStar".getBytes();
    fileOutputStream.write(bytes);
}

使用close()方法来关闭输入/输出流

完整的流家族

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YoI78Tyg-1616140025611)(G:\Gitee\notes-on-java-core-technology\Java笔记\高级特性\IO流.png)]

本章重点学习BufferedStreamWriterReader等,其它不表

组合输入/输出流过滤器

FileInputSteamFileOutputStream只能单字节读写或者给定字节读写,显然对于读写速度是很受影响的

我们可以通过组合的方式实现缓冲区的字节流读写

public class TestIo {
    public void copyBase() {
        FileInputStream fileInputStream = new FileInputStream("文件路径");
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        FileOutputStream fileOutputStream = new FileOutputStream("文件路径");
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        int by = 0;
        while ((by = bufferedInputStream.read()) != -1) {
            bufferedOutputStream.write(by);
        }
    }
}

文件输入与输出

字符(中文)流和字节流的区别:

字符流虽然以字节流为基础创建的,但是字节流可以支持声音,视频,图片,文本等所有文件类型,而字符流只支持文本文件。

字符流首先就需要考虑字符编码问题(character encoding),InputStreamReader类就可以将输入流转化成指定的编码格式:

var in = new InputStreamReader(new FileInputStream("文件路径"), StandardCharsets.UTF_8);

如何写出文件输出

对于文本输出,可以使用PrintWriter (书上介绍的是PrintWriter,更常用的应该是FileWriterFileReader)

var out = new PrintWriter("文件名",StandardCharsets.UTF_8);
out.print();
var fileWriter = ("文件名");
fileWriter.write("");// 其实操作方式和FileOutputStream类似

如何读入文本输入

最简单的处理任意文本的方式使用Scanner类。

更常用的是使用FileReader类,使用方法类似

可以使用中的newLine方法来换行

字符编码格式

Java针对字符使用的是Unicode标准。其中最常见的就是UTF_8标准。

操作文件

Path

相对路径:从当前文件夹出发的路径

绝对路径:从根目录出发的路径

类UNIX系统的路径分隔符是/,而Windows系统的路径分隔符是\\

java.nio.file.Path

Path toAbsolutePath()// 返回与该路径等价的绝对路径

java.nio.file.Paths

static Paths get(String first,String ... more);// 连接给定的字符串创建一个路径

创建文件、读写文件、复制移动

Files类包括了一系列操作文件、路径的静态方法

static void delete(Path path);// delete a file
static boolean isExecutable(Path path);// 测试一个文件是否可执行
static byte[] readAllBytes(Path path);// 读取文件的所有内容
static Path writeString(Path path, Charset charset);// 写入一个字符串到文件
static Path createFile(Path path);//创建一个空文件
static Path createDirectory(Path path);// 创建新路径
static Path copy(Path from, Path to);// 将from复制到给定位置,并返回to
static Path move(Path from, Path to);// 将from移动到给定位置,并返回to

File类(基本不含静态方法)

boolean delete();// 删除抽象路径名表示的文件或者路径
String getAbsolutePath();// 返回绝对路径
String getPath();// 将抽象路径名转换为一个路径名字符串
boolean mkdir();// 创建一个抽象路径
String toString();// 返回路径名字符串
String getName();// 返回抽象文件名

bsolutePath();// 返回绝对路径
String getPath();// 将抽象路径名转换为一个路径名字符串
boolean mkdir();// 创建一个抽象路径
String toString();// 返回路径名字符串
String getName();// 返回抽象文件名


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值