【JavaSE】文件读写

news2024/9/22 11:35:11

目录

一、文件

1、文件的概念

1.广义

2.狭义

二、路径

1、绝对路径

2、相对路径

1.进入下一级./

2.回退上一级../

三、Java里的文件基本操作----File类

1、说明

2、File类的基本操作

1.基本方法

​2.创建与删除文件

3.创建目录

4.文件的重命名

四、文件的读写操作

1、数据流

2、InputStream与OutputStream(字节流读写文件)

1.InputStream抽象类进行字节流读取操作

 2.OutputStream抽象类进行字节流写入

 3、Reader与Writer(字符流读写)

1.Reader抽象类进行字符流读取

2.Writer抽象类进行字符流写入

4、Scanner与PrintWrite(文本文件的读写)

1.Scanner

 2.PrintWrite

 5、关闭资源



 

一、文件

1、文件的概念

1.广义

把操作系统管理的软硬件资源都抽象为文件

2.狭义

狭义上的文件就是存储在硬盘上的数据

在后续的讨论中我们所说的文件是狭义上的文件,在操作系统里文件的目录结构是一个n叉树

二、路径

1、绝对路径

绝对路径是指文件在硬盘上真正存在的路径。类似于盘符:/路径这种就是绝对路径,在后续使用更推荐相对路径,因为每台电脑上每个文件的位置不一定相同,使用绝对路径,在换一台电脑后不一定能找到目标文件

2、相对路径

相对路径则是以一个基准路径为起点描述文化位置,,通过./进入下一级与../回退为上一级目录 

1.进入下一级./

如果此时基准路径是D盘要找到D盘QQ里的QQ.exe则相对路径就是:./QQ/QQ.exe

2.回退上一级../

如果此时基准路径是在D盘里的YJWJ,那么找到QQ.exe相对路径就是../QQ/QQ.exe

三、Java里的文件基本操作----File类

1、说明

文件操作是操作系统提供的一些API,每个系统的API不同,在Java里JVM中把不同系统的文件操作进行了封装,所有的系统下都可以使用JavaAPI操作文件

2、File类的基本操作

1.基本方法

获取上一级路径:getParent()

获取文件名:getName()

获取文件路径:getPath()

 

获取文件的绝对路径:getAbsolutePath()

判断文件是否存在:exists()

判断是否是目录:isDirectory()

判断是否是文件:isFile()

 2.创建与删除文件

1.实例化File对象,给构造方法传入文件路径

2.调用createNewFile()方法创建文件

 

3.调用delete()方法删除文件 

还有另一个在进程退出时删除文件的方法:deleteOnExit() 

3.创建目录

 创建单级目录:

创建多级目录:

 

 

4.文件的重命名

1.创建新的File实例,构造方法传入新名字

 

2.待改名的File实例调用renameTo方法

 

 

四、文件的读写操作

1、数据流

将读写操作的数据比作水流,流分为字节流与字符流,字节流以字节为基本单位适用于二进制,字符流以字符为基本单位适用于文本文件,Java标准库基于流的操作提供了一些类用于读写文件

2、InputStream与OutputStream(字节流读写文件)

1.InputStream抽象类进行字节流读取操作

1.构造实例----打开文件

2.读取----read

3.释放资源 ---关闭文件

代码:

public static void useInputStream() throws IOException {
        //1.构造实例,操作效果类似于打开文件
        InputStream inputStream = new FileInputStream("文件路径");

        //2.读取操作
        int n = 0;
        while(n != -1){
            n = inputStream.read();        //无参read 返回值为int当返回-1时,文件读完
            System.out.println((char)n);
        }

        byte[] content = new byte[1024];
        inputStream.read(content);        //参数为byte[]  将文件内容读取到数组里

        inputStream.read(content,0,100); //将len长度的内容读取到数组里off位置开始

        //3.释放资源类似于关闭文化
        inputStream.close();
    }

 2.OutputStream抽象类进行字节流写入

1.构造实例,打开文件

2.写文件

 

3.释放资源,关闭文件

 

代码:

public static void useOutputStream(String path) throws IOException {
        //1.构造实例,打开文件
        OutputStream outputStream = new FileOutputStream(path);

        //2.写文件
        outputStream.write(97);                 //参数为int  写入一个字节
        outputStream.write(new byte[]{98,99,100}); //参数为数组,将数组写入文件
        outputStream.write(new byte[]{101,102,103},0,2);//将数组从off开始写入len个长度

        //3.释放资源,关闭文件
        outputStream.close();
    }

 3、Reader与Writer(字符流读写)

1.Reader抽象类进行字符流读取

1.构造实例 打开文件

 

2.读取文件

3.释放资源 关闭文件

 

代码:

 public static void useReader(String path) throws IOException {
        //1.构造实例,打开文件
        Reader reader = new FileReader(path);

        //2.读取文件
        int n = 0;
        while(n != -1){
            n = reader.read();                           //read方法与前面InputStream读取类似
            System.out.println((char)n);
        }

        //3.释放资源,关闭文件
        reader.close();
    }

2.Writer抽象类进行字符流写入

1.构造实例 打开文件

 

2.写入

3.释放资源 关闭文件

 

代码:

 public static void useWriter(String path) throws IOException {
        //1.构造实例 打开文件
        Writer writer = new FileWriter(path);

        //2.写入文件
        writer.write("参数为字符串写入");
        writer.write(98); //参数为int类型写入
        writer.write("字符串写入从off来len长度",0,11);
        writer.write(new char[]{'a','b','c'});  //参数为字符数组
        writer.write(new char[]{'a','b','c'},0,2);

        //3.释放资源 关闭文件
        writer.close();
    }

4、Scanner与PrintWrite(文本文件的读写)

1.Scanner

使用:

 

代码:

 public static void useScanner(String path) throws IOException {
        //1.创建InputStream实例
        InputStream inputStream = new FileInputStream(path);

        //2.创建Scanner实例传入InputStream实例
        Scanner scanner = new Scanner(inputStream);

        //3.读取我
        while(scanner.hasNext()){
            System.out.println(scanner.next());
        }

        //4.释放资源
        inputStream.close();
    }

 2.PrintWrite

 

使用:

代码:

public static void usePrintWrite(String path) throws IOException {
        //1.创建OutputStream实例
        OutputStream outputStream = new FileOutputStream(path);

        //2.创建PrintWrite实例 传入OutputStream实例
        PrintWriter printWriter = new PrintWriter(outputStream);

        //3.开始写入
        printWriter.println("写入");
        printWriter.print(222);
        printWriter.printf("年龄 = %d",100);

        //4.释放资源
        printWriter.close();
        outputStream.close();
    }

 5、关闭资源

一定要调用close关闭资源,从PCB的文件描述符表中删除,文件描述符表本质有长度上限,一旦达到上限就会导致文件打开失败,文件泄露,释放资源最好使用try with resource,多个资源使用;隔开 

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

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

相关文章

信息安全技术

安全分析模型自动化调优 MLOps(Machine Learning Operations)是一种人工智能 的工程实践,是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化,支持ML 模型的发布、激活、监控、性能跟踪…

【Spring Cloud】Nacos命名空间Namespace的介绍与使用

本期目录1. Namespace介绍2. 创建Namespace3. 配置Namespace专栏精选文章1. Namespace介绍 Namespace 通常用来做环境隔离。例如开发环境 dev 、测试环境 test 和生产环境 pro 之间的服务/数据相互隔离,无法相互访问。 Nacos 中服务和数据存储的最外层都是 Namespa…

常用性能测试工具的比较

目录性能测试的重要性针对接口的性能测试性能测试基准接口性能测试的主要指标abenchjMeterKelude性能脚本各种监控工具参考总结性能测试的重要性 众所周知性能测试在软件测试中占有举足轻重的作用,尤其是对于互联网产品这种具有大用户量,大数据量&#…

Spring Boot学习篇(一)

Spring Boot学习篇(一) 1 Spring、SpringBoot、SpringCloud有什么区别? spring一般指Spring框架(SpringFramework),它是一个开源、轻量级的Java应用开发框架。其核心是控制反转IOC和面向切面编程AOP。Spring提供了很多包括ORM、…

Kaggle 新赛 | GoDaddy 微型企业密度预测

文章目录一、比赛背景和目标1. 背景2. 比赛目标二、提交、时间线和奖项三、代码要求一、比赛背景和目标 1. 背景 美国政策领导人努力发展更具包容性和抗衰退能力的经济体。他们也意识到,随着科技的进步,创业从来没有像今天这样容易。无论是创造一个更合…

【阙值分割】粒子群算法自适应多阈值图像分割【含Matlab源码 1459期】

⛄一、粒子群算法自适应多阈值图像分割简介 理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 粒子群优化的多阈值图像自分割算法 ⛄二、部分源代码 clc;clear;close all; %% 输入图像; Imag imread(‘24063.jpg’);%29…

【算法】常见的排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序)

目录一.常见排序类型二.排序详解1.冒泡排序2.选择排序3.插入排序4.希尔排序5.快速排序6.归并排序一.常见排序类型 插入排序:插入排序、希尔排序选择排序:简单选择排序、堆排序交换排序:冒泡排序、快速排序归并排序基数排序(又叫桶排序)八万个…

Java项目:新闻推荐管理系统(java+SSM+JavaScript+Ajax+Mysql)

源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目新闻推荐管理系统; 前台: 登录、首页、全部新闻、系统特色、猜你喜欢、分类、评论 后台: (1)文件管理:文件列表。 &#x…

3.无重复字符的最长子串

原题:https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 目录 题目描述 题解 代码实现 题目描述 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入:s "…

微型计算机技术及应用笔记

微型计算机概述 主机系统包括: CPU存储器输入输出接口总线CPU包括: 运算器(ALU)控制器(CU)寄存器组(Register)寄存器:通用寄存器、专用寄存器 控制器由指令寄存器、指令…

攻防世界——Web新手练习区

目录 view_source get_post robots ​backup cookie disabled_button simple_js xff_referer weak_auth command_execution simple_php view_source 知识点: 查看网页源代码的几种方式: 按F12键,点击elements可以查看源代码快捷…

《图解TCP/IP》阅读笔记(第六章 6.1、6.2)—— 传输层的作用、端口号

第六章 TCP与UDP TCP与UDP和赫赫威名,在此前几章已略有耳闻。 TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。 首先,我们先来回顾一下传输层的定义。 上一章中提到过,IP中有一个协议字段&#x…

猿如意|程序员的如意神器之【chat GPT】测评。

chat GPT测评1、使用感受2、功能展示3、期待优化地方3.1 猿如意网页版搜索功能3.2 chat GPT3.2.1 测试抢券才能体验3.2.2 聊天体验1、使用感受 首先,需要对猿如意进行点赞。 正如宣传语所说,猿如意,程序员的的如意兵器,这句话&am…

[附源码]Node.js计算机毕业设计个性化旅游线路推荐系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

WordCloud库简介与使用示例

今天继续给大家介绍Python相关知识,本文主要内容是WordCloud库简介与使用示例。 一、WordCloud库简介与安装 WordCloud是一款Python的第三方库,可以用于生成词云。词云可以以词语为基本单位,然后根据词语的出现频率确定词语的大小&#xff…

linux red hat 8.0 root密码破解

简介: root用户是linux用户最大权限的用户,如果不慎将其密码忘记是不可直接更改的,只能通过破解的方式来重置root密码。 linux系统的启动过程: 1 开机自检(POST),初始化部分硬件 2 搜素可用…

嵌入式从业者应知应会知识点 - 索引

大家好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给大家介绍的是嵌入式从业者应知应会知识点。 嵌入式开发需要掌握的知识点非常多,不同的技术方向有不同的知识侧重点,本系列试图整理总结嵌入式开发(尤其是软件&a…

毕业设计 stm32车牌识别 - 单片机 嵌入式 物联网 机器视觉

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码5 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长…

juc-3-volatile

目录 1 多线程下变量的不可见性及解决方案 2 不可见性解决方案 2.1 加锁方式解决 2.2 使用volatile关键字 2.3 while(true)速度快调用本地线程内存,加延时即可访问主内存的共享变量 3 volatile不保证原子性以及解决方案 3.1 案例 volatile 验证不是原子性 3.…

详细解析预处理

预处理一.总体概述1.注释去除2.宏替换二.宏定义1.数值宏常量2.字符串宏常量3.用宏定义注释符号4.用宏定义表达式(难点)1.第一种情况2.第二种情况5.#undef(宏的有效范围)1.两个问题2.#undef的使用3.一段代码的理解三.条件编译1.#if…