java IO

一、文件(File)

有一种概念叫万物皆文件,电脑中的文件夹是文件,我们平时访问的文本、图片等叫文件。我们写程序有时候需要对文件进行操作。比如我们要编程把一张图片复制出来。那么我们第一步要把这个文件从磁盘中拿到程序中来(这个过程我们把文件变成流,我们叫他输入流),接下来就要把程序中的输入流给放到指定的位置去,这又被叫做输出流了。

1、文件相关操作

(1)构造器

在这里插入图片描述
最常用的是File(String)
File(String,String):第一个String可以放父路径,第二个String放子路径,在开发中常用到,可以用来访问同一个路径下的不同文件。

(2)路径

在这里插入图片描述
文件存放的地方被我们称为路径,路径分为绝对路径和相对路径。
这里就需要我们输入一个路径名。

(3)常用方法

在这里插入图片描述
在这里插入图片描述

二、流

文件在不同的对象(磁盘,内存)间流动,是通过流的形式。流是一组有序的数据序列,流把我们的文件从一个地方带到另一个地方。

1、流的分类1

我们通过流的方向,把流分为两类。
文件通过流从磁盘来到内存(我们的程序),这个流被称为输入流。而从内存来到磁盘,这个流被称为输出流。
输入流:InputStream, Reader
输出流:OutputStream,Writer

2、流的分类2

可以看到在输入流那里,我写了InputStream, Reader。他们都是输入流,不同的是前者是字节流,后者是字符流。
这里要先讲一个概念,位,字节和字符

(1)位,字节,和字符

什么是位,一位二进制数就是位(bit)。10110,第一个一是一个位,这串二进制总共5个位。一个字节有8个位。
但是我们不能确定的说一个字符有2个位或者3个位。
那么一个字符到底由多少个位组成的呢?
这取决于他采用什么编码方式。在使用utf8编码的时候,一个汉字字符占2-3个字节。使用gbk编码占两个字节。gbk编码是中国自制的编码。


上面提到的InputStream还有Reader等是抽象类,是不能创建实例的。
关于字节流和字符流的区别,字节流就是传输的时候一个个字节传输,而字符流是一个个字符进行传输。因此,易得,字符流传输速率肯定远远高于字节流。那为什么还需要字节流?
因为可能存在转码问题。像一些二进制文件(图片,音乐,视频)。如果使用字符流进行传输,可能传输后会发现文件损坏了。

3、节点流和处理流

这里科普一个概念,什么是节点流和处理流

节点流:可以从一个特定的数据源读写数据,如FileReader,FileWriter。功能可能不够强大

处理流:对节点流进行包装,实现更加强大的功能,更加灵活,BufferedReader、BufferedWriter。效率更高

三、常用的流

1、FileInputStream和FileOutputStream

这是专门用来操作文件的流。我们可以用这些来操作文件

(1)FileOutputStream

这是一个文件输出流,我们可以用他做一些操作,比如说往一个文件里写东西。

package liu.file;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteHello {
   
    public static void main(String[] args) throws IOException {
   
        String dest = "F://photos//hello.txt";
        FileOutputStream fos = new FileOutputStream(dest);
        String s = "hello,my first file";
        fos.write(s.getBytes());
        fos.close();
    }
}

这是往F盘一个叫hello的txt文件里写入一句”hello,my first file“
如果我在F盘没有这个文件,运行后可以发现多出来一个目标文件,上面就写着”hello,my first file“。
如果我在F盘有这个文件,并且上面写了这句话,我把s改成

String s = "你好,我的第一个文件";

可以发现原来的那个hello被覆盖了。
我们可以发现目前这个流的作用是覆盖,那假设我们不想覆盖,而是想实现追加呢?

a、FileOutputStream的构造器

在这里插入图片描述

b、FileOutputStream的常用方法

在这里插入图片描述
这个方法可以以指定名字打开一个文件,并指定流的输出是以追加的模式
在这里插入图片描述

(2)FileInputStream

从一个文件中读取数据并输出到控制台

package liu.file;

import java.io.FileInputStream;

import java.io.IOException;

public class File2 {
   
    public static void main(String[] args) throws IOException {
   
        String path ="F://photos//hello.txt";
        FileInputStream fis = new FileInputStream(path);
        int len = 0;
        byte[] readDate = new byte[8];
        while (

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值