Java 文件IO操作基础,File,FileInputStream,FileOutputStream

news2024/10/6 19:26:51

什么是文件

有个时候我们程序中的数据不会直接保存,一旦程序断电,数据将不会存在,如果我们想要我们程序中的数据永久的保存起来,所以,java的文件io显得非常重要。

什么是文件流

创建文件

如下相关的文件io方法

new File(String pathName) 根据目录创建一个文件

如下代码

import java.io.File;

public class Main {
    public static void main(String[] args) {
//        方法1 使用 new file(string name)创建一个文件
        String filePath="/home/windstorm/javafile.txt";
        File file = new File(filePath);
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        }catch (Exception e)
        {
            System.out.println("创建失败");
        }

    }
}

执行效果如下

文件也成功的创建在我的家目录

new File(String parent,String child)根据父目录创建一个子文件

如下代码

import java.io.File;

public class Main {
    public static void main(String[] args) {

        String childPath="javafile2.txt";
        String parenPath="/home/windstorm/";
        File file = new File(parenPath,childPath);
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        }catch (Exception e)
        {
            System.out.println("创建失败");
        }

    }
}

执行效果

执行结果

new File(File parentName,childPath)创建一个根据父目录文件和子路径创建一个文件

import java.io.File;

public class Main {
    public static void main(String[] args) {

        String childPath="javafile3.txt";
        String parenPath="/home/windstorm/";
//        得到父目录的路径
        File parentFile=new File(parenPath);
//        得到file
        File file = new File(parentFile,childPath);
        try {
//            执行这一步才会真正的写入文件到磁盘
            file.createNewFile();
            System.out.println("文件创建成功");
        }catch (Exception e)
        {
            System.out.println("创建失败");
        }

    }
}

运行效果

执行效果

删除文件

使用delete方法可以删除文件或者目录

如下代码删除

/home/windstorm/javafile1.txt文件

import java.io.File;

public class Main {
    public static void main(String[] args) {

//      填写要删除的文件路径
        File file = new File("/home/windstorm/javafile1.txt");
//    判断文件是否存在
        if (file.exists())
        {
//            删除
            try {
                file.delete();
                System.out.println("删除成功");
            }catch (Exception e)
            {

            }
        }
    }
}

 运行效果如下

文件成功删除

delete也可以删除目录

创建如下目录

/home/windstorm/javafiles

执行如下代码

import java.io.File;

public class Main {
    public static void main(String[] args) {

//      填写要删除的文件路径
        File file = new File("/home/windstorm/javafiles/");
//    判断文件是否存在
        if (file.exists())
        {
//            删除
            try {
                file.delete();
                System.out.println("删除成功");
            }catch (Exception e)
            {

            }
        }
    }
}

执行效果如下

目录删除成功

获取文件相关信息

在java在可以获取如下信息

如下程序获取/home/windstorm/javafile1.txt 的文件信息

import java.io.File;

public class Main {
    public static void main(String[] args) {

        File file = new File("/home/windstorm/javafile1.txt");
//        得到文件的名字
        System.out.println(file.getName());
//        得到绝对路径
        System.out.println(file.getAbsolutePath());
//        得到父目录
        System.out.println(file.getParent());
//        得到文件的长度
        System.out.println(file.length());
//        文件是否存在
        System.out.println(file.isFile());
//        目录是否存在
        System.out.println(file.isDirectory());
    }
}

执行结果如下

操作目录

对于目录的操作,有如下方法.

  如下程序

import java.io.File;

public class Main {
    public static void main(String[] args) {

        File file = new File("/home/windstorm/JavaFiles");
//        如果JavaFile没有操作,就创建一个这样的目录
        file.mkdir();
    }
}

运行效果如下

成功的在/home/windstorm/创建了一个JavaFiles的目录

mkdirs的效果可以创建多个目录

代码如下

import java.io.File;

public class Main {
    public static void main(String[] args) {

        File file = new File("/home/windstorm/JavaFiles/files");
//        如果JavaFile/files没有操作,就创建一个这样的目录
        file.mkdirs();
    }
}

运行效果如下

使用mkdirs可以创建含有子目录的目录.

IO流

IO(Input Output)流就是输入输出流。

从外部设备读取数据到内存中就叫做输入流。

从内存中将数据输出到外部设备就叫做输出流。

流的分类

FileInputStream使用

FileInputStream.read()读取一个字符

案例

读取目录/home/windstorm/data.txt 中的数据到java程序中。

 首先读取一个字符

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;

public class Main {
    public static void main(String[] args) {

        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
        int data;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
//            读取一个字节,如果没有数据,返回-1
            data = fileInputStream.read();
//            得到输出结果
            System.out.println("Read date is ::"+(char)data);

        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }

    }
}

全部读取

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;

public class Main {
    public static void main(String[] args) {

        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
        int data;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
//            读取一个字节,如果没有数据,返回-1
            data = fileInputStream.read();
            while (data!=-1)
            {
//            得到输出结果
                System.out.println("Read date is ::"+(char)data);
                data=fileInputStream.read();
            }


        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }

    }
}

FileInputStream.read(buf) 读取n个字节到buf中

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;

public class Main {
    public static void main(String[] args) {

        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
//        使用字符数组的方式读取字符
        byte [] buf = new byte [4];
        int readLenth;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
//            读取4个字符到buf中,返回读取字符的个数
            readLenth=fileInputStream.read(buf);
//            转成字符串输出
            System.out.println(new String(buf,0,readLenth));
            
//            通常这种读取方式的效率比较高 

        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }

    }
}

全部读取

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;

public class Main {
    public static void main(String[] args) {

        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
//        使用字符数组的方式读取字符
        byte [] buf = new byte [4];
        int readLenth;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
            //            读取4个字符到buf中,返回读取字符的个数
            readLenth=fileInputStream.read(buf);
            while (readLenth!=-1)
            {
//            转成字符串输出
                System.out.println(new String(buf,0,readLenth));
                readLenth=fileInputStream.read(buf);
            }



//            通常这种读取方式的效率比较高

        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }

    }
}

FileOutputStream的使用

FileOutputStream.write() 输出一个字符到磁盘

这里输出一个字符到当前目录下

import java.io.FileOutputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("./a.txt");
        fileOutputStream.write('h');

        fileOutputStream.close();
    }
}

运行结果如下

如下代码输出一个字符串到磁盘。

import java.io.FileOutputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("./a.txt");
        fileOutputStream.write("Good idea".getBytes());
        fileOutputStream.close();
    }
}

效果如下

将内存数据追加到磁盘

import java.io.FileOutputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        //加上true以后表示追加
        FileOutputStream fileOutputStream = new FileOutputStream("./a.txt",true);
        fileOutputStream.write("Good idea".getBytes());
        fileOutputStream.close();
    }
}

案例:视频拷贝

拷贝/home/windstorm/丝滑火焰流星锤~原创.mp4 到/home/windstorm/Videos/目录下

 

如下代码

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class Main {
    public static void main(String[] args) throws IOException {
        new Main().VideosCopy("/home/windstorm/丝滑火焰流星锤~原创.mp4","/home/windstorm/Videos/丝滑火焰流星锤.mp4");
    }
    void VideosCopy(String targetPath,String disPath) throws IOException
    {
        FileInputStream inputStream = new FileInputStream(targetPath);
        FileOutputStream fileOutputStream = new FileOutputStream(disPath);

//        每一次读取8个字节到内存
        byte buf [] = new byte[8];
        while ((inputStream.read(buf))!=-1)
        {
            fileOutputStream.write(buf);
            System.out.println("Copied 8 byte ");
        }
        System.out.println("Done");

    }
}

执行结果如下

成功将视频拷贝到videos目录下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【教程】Wireshark抓取抖音直播的OBS推流地址和密钥

真不用花钱去买提取推流码的软件。。。自己提取很简单的。 简单记录一下,以备自己需要时候忘了怎么搞。 1、电脑开热点,手机连接热点; 2、电脑安装wireshark软件,并选择WLAN或者以太网接口; 3、wireshark筛选rtmpt&am…

Kubernetes持久化Events到sentry

背景 Kubernetes中的事件最终还是存储在etcd中,默认情况下只保存1个小时,由于etcd并不支持一些复杂的分析操作,默认Kubernetes只提供了非常简单的过滤方式,比如通过Reason、时间、类型等。同时这些事件只是被动的存在etcd中&…

CAPL(vTESTStudio) - DOIP - UDP发送_03

继UDP接收的介绍完成后,今天我们介绍下UDP发送的函数,这里我们将我自主开发的函数整体都会介绍个大家,一般能够完成大家日常脚本开发中90%以上使用发送UDP的数据函数,绝对干货满满。 UDP发送 一、参数定义 无论DoIP发送报文的UDP还是TCP函数,亦或是CAN、CANFDLIN的发送函…

Redux了解及应用(三)

React - redux 使用(由浅入深):https://blog.csdn.net/Jie_1997/article/details/128078971 这篇文章总结的很棒!!!了解redux及应用直接看这篇文章即可 备注:第五节的第三小节,容器…

学习驱动的复杂软件符号执行

原文来自微信公众号“编程语言Lab”:学习驱动的复杂软件符号执行搜索关注“编程语言Lab”公众号(HW-PLLab)获取编程语言更多技术内容!欢迎加入编程语言社区 SIG-编程语言测试,了解更多编程语言测试相关的技术内容。加入…

元宇宙:有人追捧,就会有人抵触

或许,直到现在,我们依然无法否认元宇宙即将对我们的生产和生活产生的深刻影响。即使是在它遭遇巨大的不确定性的大背景下,依然如此。 有人追捧,便有人抵触。元宇宙商用的止步不前,元宇宙技术的难以突破……几乎都是这…

为什么不进行穷举测试?

本章主要介绍不对所有可能性进行测试的原因,对于经理和测试人员,都应该了解测试是一种采样过程,需要了解采样给测试所带来的风险。 1、可进行测试的数目是无限的 如果不能查看代码内部逻辑,可输入的测试用例是无限的。当然还有在不…

第30章 分布式缓存强制删除触发器的触发调试

1 Services.Users.Caching.RoleCacheEventConsumer using Core.Caching; using Core.Domain.Users; using Services.Caching; namespace Services.Users.Caching { /// <summary> /// 摘要&#xff1a; /// 通过该类中的方法成员&#xff0c;在角色实体的1个实例…

Linux —— 文件系统概述、软硬链接与动静态库

目录 1.文件系统概述 1.1磁盘的基本存储结构 1.2磁盘的基本逻辑结构 1.3操作系统中的文件系统 1.4文件系统如何对磁盘进行管理 2.软链接、硬链接 2.1软链接 2.2硬链接 2.3目录的硬链接数 3.静态库和动态库 3.1静态库的制作 3.2静态库的使用 3.3动态库的制作 3.4动态…

年薪50k大佬带你五分钟学会接口自动化测试框架

今天&#xff0c;我们来聊聊接口自动化测试是什么&#xff1f;如何开始&#xff1f;接口自动化测试框架怎么做&#xff1f;自动化测试自动化测试&#xff0c;这几年行业内的热词&#xff0c;也是测试人员进阶的必备技能&#xff0c;更是软件测试未来发展的趋势。特别是在敏捷模…

分布式请求链路跟踪-SpringCloud Sleuth

文章目录1.概述1.1.为什么会出现这个技术&#xff1f; 需要解决哪些问题?1.2.是什么?1.3.如何解决问题?2.搭建链路监控步骤2.1.zipkin2.2.服务提供者2.3.服务消费者&#xff08;调用方&#xff09;2.4.测试1.概述 1.1.为什么会出现这个技术&#xff1f; 需要解决哪些问题?…

力扣刷题记录——1108. IP 地址无效化、1281. 整数的各位积和之差 次数 、1295. 统计位数为偶数的数字、1394. 找出数组中的幸运数

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——1108. IP 地址无效化、1281. 整数的各位…

手撕排序算法(一)——插入排序

排序的概念及意义本章内容我们采用C语言完成代码。排序的概念我们先来了解一下基础概念&#xff1a;排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性&#xff1a;假定在待排序…

cin关闭流同步的利弊与cout的endl使用(超时问题)

重要&#xff1a;1&#xff1a;比如print&#xff0c;scanf&#xff0c;gets()&#xff0c;pus()&#xff0c;getchar()不要与cin&#xff0c;cout共用2&#xff1a;cout中不要使用endl每次使用endl&#xff0c;都要flush缓冲区&#xff0c;造成大量时间耗费。推荐cout <<…

springBoot国际化的一种方式

引言&#xff1a; 当我们的应用面向不同国家用户时&#xff0c;根据不同的locale返回不同的语言信息的国际化功能就显得有必要了。一般来说国际化主要表现在前端用户界面上&#xff0c;在现在前后端分离的背景下&#xff0c;前端页面的国际化交由前端代码独立完成&#xff1b;少…

只用两行代码做个表白二维码,赶快送给你心目中那个她吧♥(๑> ₃ <)♥

上一篇&#xff1a;教你一招完美解决 pptx 库安装失败的问题 今天有同事给我说&#xff1a;女朋友生日快到了&#xff0c;想用Python给她写个表白二维码&#xff0c;然后印在买的衣服上送给她。这么特别的生日礼物&#xff0c;博主还是第一次听到&#xff0c;不得不说&#xff…

Linux-make/Makefile

一、了解make/Makefile对于make/Makefile首先我们需要了解make是一条命令&#xff1b;Makefile是一个文件。make是一个命令&#xff0c;可以执行某条指令。这个我们理解&#xff0c;那Makefile是一个文件&#xff0c;那这个文件是干什么用的呢&#xff1f;这个文件内部一共包含…

SAP中新增销售科目配置分析实例

公司有一批呆滞维修用备件需要卖出&#xff0c;对应在系统内就需要做销售处理。但通常情况下&#xff0c;系统设计时没有考虑和配置备件销信也很正常。所以&#xff0c;处理时可能因为缺少配置做不下去。我需要解决配置问题&#xff0c;并做下可行性的测试。 首先考虑到的是末…

UniRx之ReactiveCommand

前言 UniRx中ReactiveCommand和AsyncReactiveCommand是一种基于IObservable的可控命令机制&#xff0c;用于控制是否允许进程运行 很难用文字说明&#xff0c;下面我们直接看代码吧 ReactiveCommand void Start() {//创建IObservable<bool>ReactiveProperty<bool&g…

分布式事务2种协议 及 4种模式

分布式事务协议 解决分布式事务&#xff0c;也有相应的规范和协议。分布式事务相关的协议有2PC、3PC。 由于三阶段提交协议3PC非常难实现&#xff0c;目前市面主流的分布式事务解决方案都是2PC协议。 2PC&#xff1a;两阶段提交协议 两阶段提交协议&#xff1a;事务管理器分…