Java文件操作(从创建文件到简单输入输出流)

目录

前言

起步:创建文件

File类

尝试创建一个文件

代码展示

输出结果

基础文件写入与输出:输入输出流

stream流

FileInputStream类

基本读取实现

代码展示

输出结果

FileOutputStream类

基本写入实现

代码展示

输出结果

后言


前言

在上一篇博客(Java实现ATM机模拟系统(week1)-CSDN博客)中,博主有提到要试着做一个简单的ATM机模拟系统,要做出一个合理的可使用的系统,数据的保存是一个需要思考的问题,总不能说将数据保存到内存中,然后一结束运行数据全部丢失吧。对于还未接触过数据库的我来说,能够想到的最好办法就是利用文件操作,把数据写入到文件中,需要时再进行读取。

起步:创建文件

File类

  • File类的对象可以用来表示文件(File)或目录(Directory)。
  • 创建了File类的对象之后,可以调用其方法对文件或目录的属性(如文件名称,日期等)进行修改。
  • file类对象只能修改文件属性,不能直接进行文件读写操作。

尝试创建一个文件

代码展示

import java.io.File;

public class Main {
    public static void main(String[] args) {
        File file = new File("src\\test.txt") ; //创建File类对象,并给出其相对路径,否则默认创建在当前路径下

        if(file.exists()){ //调用exists方法,判断文件是否存在
            System.out.println("文件已存在!"); //如已存在,给出提示
        }else { //如不存在,执行创建操作
            try{
                file.createNewFile();
                System.out.println("文件创建成功");
            }catch (Exception e){

            }
        }

        //基本方法演示
        System.out.println("文件的名字:" + file.getName());
        System.out.println("文件的路径:" + file.getPath());
        System.out.println("文件的绝对路径:" + file.getAbsolutePath());
        System.out.println("是否为目录:" + file.isDirectory());
        System.out.println("文件大小:" + file.length());
    }
}

输出结果

文件已存在!//之前已经创建过一回了,不是第一次输出
文件的名字:test.txt
文件的路径:src\test.txt
文件的绝对路径:D:\IDEA\IDEAcode\FileOperationTest\FileOperationTest\src\test.txt
是否为目录:false
文件大小:0

基础文件写入与输出:输入输出流

stream流

流指的是一连串流动的数据信号,通过先进先出的方式接收和发送数据

  • 数据流分为输入输出流
  • 输入输出流又分为字节流与字符流(本篇博客先了解对字节流的操作,字符流其实同理)

FileInputStream类

  • 该类继承于InputStream类,用于进行基本的文件读取操作
  • 由于使用的是字节流,无法读取中文字符

基本读取实现

代码展示
import java.io.File;
import java.io.FileInputStream;

public class FileInput {
    public static void fileInput(File file) {
        try {
            FileInputStream fileInputStream;
            fileInputStream = new FileInputStream(file);

            for (int i = 0; i < file.length(); i++) { //循环读取并打印
                char s = (char) (fileInputStream.read()) ;
                System.out.print(s);
            }

            System.out.println(); //换行
            fileInputStream.close(); //关闭文件
        } catch (Exception e) {
            System.out.println("文件打开失败");
        }
    }

}
输出结果

在.txt文件中写入”Hello world!“并在main方法中编写测试,得到以下结果

文件已存在!
Hello world! //文件内容
文件的名字:test.txt
文件的路径:src\test.txt
文件的绝对路径:D:\IDEA\IDEAcode\FileOperationTest\FileOperationTest\src\test.txt
是否为目录:false
文件大小:12 //文件大小发生变化

FileOutputStream类

  • 该类继承于OutputStream类,用于进行基本的文件写入操作
  • 由于使用的是字节流,无法读取中文字符

基本写入实现

代码展示

比如我们要在文件中写入"I love study"。首先,我们清空.txt文件中的内容,接着实现下方代码

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.EmptyStackException;

public class FileOutput {
    public static void fileOutput(File file) throws FileNotFoundException { //抛出文件未找到的异常
        FileOutputStream fileOutputStream = new FileOutputStream(file) ;

        String string = "I love Study" ;
        byte[] buff = string.getBytes() ; //字符串转字节数组(因为要写入字节流)

        try {
            fileOutputStream.write(buff); //写入字节流
        } catch (Exception e) {

        }finally {
            try {
                fileOutputStream.close(); //关闭文件
            } catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}
输出结果

在main方法中编写测试,输出以下结果

文件已存在!
I love Study //写入的字符串
文件的名字:test.txt
文件的路径:src\test.txt
文件的绝对路径:D:\IDEA\IDEAcode\FileOperationTest\FileOperationTest\src\test.txt
是否为目录:false
文件大小:12

后言

本篇博客就到此结束了,但学无止境,还有许多知识等待我们学习。

  1. 本篇博客初步学习了基本输入输出流的使用,实现了文件的读取和写入,但只接触了对字节流的操作,解决不了中文读写的问题,还需去学习字符流的相关操作。
  2. 同时,文件操作中的一些代码(如异常的抛出,try,catch,finally结构的使用)都需要进行进一步学习。

新手上路,水平有限,如有错误,还望海涵并指出!

与君共勉!

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eternal*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值