文件相关api

news2024/11/24 2:00:42

File

代表操作系统的文件对象,它提供了定位文件位置,获取文件中的信息,创建文件,删除文件等,但不能读写内容。

构造器:

public File(String pathname)  根据文件路径,创建文件对象。(只会根据路径来生成一个文件件对象,如果路径是错误的也无法判断)

文件路径:

绝对路径:C:\\Users\\DELL\\Desktop\\javaSE

或C:/Users/DELL/Desktop/javaSE

相对路径(一般定位到模块下):

Yang-app/src/data.txt

常用API:

public boolean isDirectory()   判断File对象是否为文件夹

@Test
    void filetest1(){
        //空文件,路径为错误路径
        File file1 = new File("B:\\workspace\\xuecheng\\1.txt");
        //文件夹文件
        File file2 = new File("B:\\workspace\\xuecheng\\test");
        if (file1.isDirectory()){
            System.out.println("file1文件为文件夹");
        }
        if (file2.isDirectory()){
            System.out.println("file2文件为文件夹");
        }
    }

运行结果:

public boolean ifFile()      判断File对象是否为文件,也可用来判断文件是否存在

 @Test
    void filetest1(){
        //空文件,路径为错误路径
        File file1 = new File("B:\\workspace\\xuecheng\\1.txt");
        //文件夹文件
        File file2 = new File("B:\\workspace\\xuecheng\\test");
        //文本文件对象
        File file3 = new File("B:\\workspace\\xuecheng\\test\\1.txt");
        if (file1.isFile()){
            System.out.println("file1是文件");
        }
        if (file2.isFile()){
            System.out.println("file2是文件");
        }
        if (file3.isFile()){
            System.out.println("file3是文件");
        }
    }

 运行结果:

public boolean exists()      判断File中储存的路径是否存在

@Test
    void filetest1(){
        //空文件,路径为错误路径
        File file1 = new File("B:\\workspace\\xuecheng\\1.txt");
        //文件夹文件
        File file2 = new File("B:\\workspace\\xuecheng\\test");
        //文本文件对象
        File file3 = new File("B:\\workspace\\xuecheng\\test\\1.txt");
        if (file1.exists()){
            System.out.println("file1的路径存在");
        }
        if (file2.exists()){
            System.out.println("file2的路径存在");
        }
        if (file3.exists()){
            System.out.println("file3的路径存在");
        }
    }

运行结果

public String getAbsolutePath() 返回绝对路径的字符串

  //空文件,路径为错误路径
        File file1 = new File("B:\\workspace\\xuecheng\\1.txt");
        //文件夹文件
        File file2 = new File("B:\\workspace\\xuecheng\\test");
        //文本文件对象
        File file3 = new File("B:\\workspace\\xuecheng\\test\\1.txt");
        System.out.println(file1.getAbsoluteFile());
        System.out.println(file2.getAbsoluteFile());
        System.out.println(file3.getAbsoluteFile());

 运行结果

public String getPath()      返回File中存储的路径的字符串

//空文件,路径为错误路径
        File file1 = new File("B:\\workspace\\xuecheng\\1.txt");
        //文件夹文件
        File file2 = new File("B:\\workspace\\xuecheng\\test");
        //文本文件对象
        File file3 = new File("B:\\workspace\\xuecheng\\test\\1.txt");
        System.out.println(file1.getPath());
        System.out.println(file2.getPath());
        System.out.println(file3.getPath());

运行结果:

public String getName()     获取文件名

//空文件,路径为错误路径
        File file1 = new File("B:\\workspace\\xuecheng\\1.txt");
        //文件夹文件
        File file2 = new File("B:\\workspace\\xuecheng\\test");
        //文本文件对象
        File file3 = new File("B:\\workspace\\xuecheng\\test\\1.txt");
        System.out.println(file1.getName());
        System.out.println(file2.getName());
        System.out.println(file3.getName());

运行结果:

public long lastModified()    返回文件最后修改的毫秒值

Public long length()         返回文件的字节数(大小)

创建文件

public boolean createNewFile() 创建一个空文件

    @Test
    void filetest1() throws IOException {
        //空文件,路径为错误路径
        File file1 = new File("B:\\workspace\\xuecheng\\1.txt");
        //文件夹文件
        File file2 = new File("B:\\workspace\\xuecheng\\test");
        //文本文件对象
        File file3 = new File("B:\\workspace\\xuecheng\\test\\1.txt");
        file1.createNewFile();
    }

运行结果:

public boolean mkdir()  只能创建一级文件夹

 @Test
    void filetest1() throws IOException {

        File file = new File("B:\\workspace\\xuecheng\\test\\2");
        file.mkdir();
    }

public boolean mkdirs() 可以创建多级文件夹

 @Test
    void filetest1() throws IOException {

        File file = new File("B:\\workspace\\xuecheng\\test\\3\\4\\5");
        file.mkdirs();
    }

public static File createTempFile() 在默认目录创建临时文件
 @Test
    void filetest1() throws IOException {
                                            //前缀         //后缀
        File tempFile = File.createTempFile("123", ".txt");
        File absoluteFile = tempFile.getAbsoluteFile();
        System.out.println(absoluteFile);
        tempFile.delete();
    }

遍历功能:

public String[] list() 获取当前文件夹中所有一级文件的名称返回到字符串数组中。

public File[] listFile() 获取当前文件夹中所有一级文件对象返回到文件对象数组中。

使用listFile()的注意事项:

当调用者不存在时,返回null。

当调用者是一个文件时,返回null。

当调用者是一个空文件夹时,返回长度为0的数组。

当调用者是一个有内容的文件夹时,将里面所有的文件和文件夹的路径返回到File数组。

当调用者是一个有隐藏文件的文件夹时,里面所有的文件和文件夹的路径返回到File数组,包含隐藏内容。

String编码

byte[] getBytes() 使用平台默认的字符集将String编码为一系列字节,将结果储存到新的字符数组中。

byte[] getBytes(String charsetName)  使用指定的字符集(GBK等)将String编码为一系列字节,将结果储存到新的字符数组中。

String解码

String(byte[] bytes)  使用平台默认的字符集将指定字节数组解码构造为新的String。

String(byte[] bytes,String charsetName)  使用指定的字符集将指定字节数组解码构造为新的String。

String(byte[] bytes,int offset,int length)  使用平台默认的字符集将指定字节数组解码构造为新的String,并且可以指定开始位置,和读取数据长度。

IO流

IO流体系结构:

FileInputStream文件字节输入流

构造器:

public FileInputStream(File file)创建字节输入流管道(对象)与源文件对象接通。

public FileInputStream(String pathname)创建字节输入流管道(对象)与源文件路径接通。

常用方法:

public int read() 每次读取一个字节返回,如果没有字节可读返回-1。(读取中文可能会乱码,因为中文每个字符占3个字节,在读取字节的时候会截断)

public int read(byte[] buffer) 每次读取一个字节s数组并接收到buffer中,函数返回到读取的字节个数,如果没有字节可读返回-1。(读取中文可能会乱码,因为中文每个字符占3个字节,可能在读取字节的时候会截断)

解决读取中文乱码问题:

        1.定义一个与文件大小一样的byte[]数组(使用File.length来获取文件的大小,注意length返回的是long,需要强转)。】

@Test
    void filetest1() throws IOException {
        File file = new File("B:\\workspace\\xuecheng\\test\\1.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] bytes = new byte[(int)file.length()];
        fileInputStream.read(bytes);
        String s = new String(bytes);
        System.out.println(s);
        fileInputStream.close();
    }

        2.JDK9中FileInputStream添加了读取全部字节的API。

public byte[] readAllBytes()将文件中的字节数据装到一个字节数组返回。

FileOutputStream文件字节输出流

构造器:

public FileOutputStream(File file) 创建一个字节输出流管道,与文件对象建立连接。(会直接覆盖源文件内容)

public FileOutputStream(String file) 创建一个字节输出流管道,与文件的路径建立连接。(会直接覆盖源文件内容)

public FileOutputStream(File file,boolean append) 创建一个追加的字节输出流管道,与文件的对象建立连接。

public FileOutputStream(String file,boolean append) 创建一个追加的字节输出流管道,与文件的路径建立连接。

常用方法:

public void write(int a) 写一个字节出去。

public void write(byte[] buffer) 写一个字节数组出去。

public void  write(byte[] buffer,int pos,int len) 写一个字节数组的一部分出去。(pos是起始索引,len是长度)

释放资源:文件字节输入流和文件字节输出流都非常的消耗资源,使用完毕后一定要释放资源。

方法:

1.使用  try{

}catch{

}finally{

}

来释放资源,释放资源的语句要写在finally中,且释放前要判断对象是否为空。(释放语句为close)

2.JDK7添加了改进方案

try(){

}catch{

}

将资源定义try后的括号内,可以实现自动释放。(JDK9改良后,括号内可以直接接收输入流对象和输出流对象,不过要抛出异常)

资源:指的是实现Closeable/AutoCloseable接口对象的类。

 

字符输入流Reader

构造器:

public FileReader(File file)创建字符输入流管道(对象)与源文件对象接通。

public FileReader(String pathname)创建字符输入流管道(对象)与源文件路径接通。

方法:

public int read()每次读取一个字符(字符的编码)返回,没有字符可读就返回-1。

public int read(char[] buffer)每次读取一个字符数组,返回读取的字符个数,没有字符可读就返回-1。

使用方法:

@Test
    void filetest1() throws IOException {
        FileReader fileReader = new FileReader("B:\\workspace\\xuecheng\\test\\1.txt");
        char[] buffer =new char[1024];
        int len;
        while ((len = fileReader.read(buffer))!=-1){
            String s = new String(buffer, 0, len);
            System.out.println(s);
        }
    }

字符输出流 Writer

public FileWriter(File file)创建字符输出流,与原文件对象连通。

public FileWriter(File file,boolean append)创建字符输出流,与原文件对象连通,可追加数据。

public FileWriter(String filepath)创建字符输出流,与原文件路径连通。

public FileWriter(String filepath,boolean append)创建字符输出流,与原文件路径连通,可追加数据。

常用方法:

void write(int c)  写一个字符。

void write(char[] cbuf)  写一个字符数组。

void write(char[] cbuf,int off,int len)  写一个字符数组的一部分。

void write(String str)  写一个字符串。

void write(String str,int off,int len)  写一个字符串的一部分。

流的关闭与刷新:

flush() 刷新流,可以继续使用。

close()关闭流,释放资源,但关闭前会刷新,关闭后不能使用。

 

缓冲流

体系:

字节缓冲流:

字节缓冲输入流:BufferedInputStream,提高字节输入流读取数据的性能,读写并无变化。

字节缓冲输出流:BufferedOutputStream,提高字节输出流读取数据的性能,读写并无变化。

构造器:

public BufferedInputStream(InputStream is) 可以把低级的字节输入流包装成高级的字节输入缓冲流。

public BufferedOutputStream(OutputStream os) 可以把低级的字节输出流包装成高级的字节输出缓冲流。

字符缓冲流

字符缓冲输入流BufferedReader

构造器:

public BufferedReader(Reader r) 可以把低级的字符输入流包装成高级的字符输入缓冲流,从而提高性能。

新增方法:

public String readLine()读取一行并返回,无行可读返回null。

字符缓冲输出流BufferedWriter:

构造器:

public BufferedWriter(Writer w)可以把低级的字符输出流包装成高级的字符输出缓冲流,从而提高性能。

常用方法:

public void newLine() 换行操作。

转化流

体系:

 

字符输入转换流InputStreamReader

构造器:

public InputStreamReader(InputStream is,String charset)

可以把原始的字节输入流按照指定编码方式转化为字符输入流,这样就不会乱码了。

字符输出转换流OutputStreamWriter

构造器:

public OutputStreamWriter(OutputStream os,String charset)

可以把原始的字节输出流按照指定编码方式转化为字符输出流

 

对象序列化

作用:把内存中的对象存储到磁盘文件中,称为对象序列化。(对象如果要序列化,必须实现Serializable序列化接口,序列化的版本号与反序列化的版本号需要相同)

使用的流为对象字节输出流ObjectOutputStream

体系:

构造器:

public ObjectOutputStream(OutputStream)把低级的字节输出流包装成对象字节输出流。

序列化方法:

public final void writeObject(Object obj)把对象写到对象序列化流的文件中。

对象反序列化

作用:以内存为基准,把存储到磁盘文件中去的对象数据恢复成内存中的对象,称为对象反序列化。(如果对象的某一属性不想序列化,可以在定义属性前加transient)

使用的流为对象字节输入流ObjectInputStream

体系:

 

构造器:

public ObjectInputStream(InputStream out)把低级字节输入流包装成高级的对象字节输入流

方法:

public ObjectreadObject()把存储到磁盘文件中去的对象数据恢复成内存中的对象并返回。

打印流:

作用:打印流可以实现方便,高效的打印数据到文件夹中去。打印流一般指PrintStream和PrintWriter。(可以实现打印什么数据就是什么数据)

体系:

PrintStream

构造器:

public PrintStream(OutputStream os)打印流直接通向字节输出流管道。

public PrintStream(File file)打印流直接通向文件对象。

public PrintStream(String filepath)打印流直接通向文件路径。

方法:

public void print(XXX xxx)打印任意类型数据出去。

PrintWriter

  构造器:

public PrintWriter(OutputStream os)打印流直接通向字节输出流管道。(要写对文件追加内容,需要在低级管道这里声明,不能直接连接文件路径和对象)

public PrintWriter(Writer w)打印流直接通向字符输出流管道。

public PrintWriter(File file)打印流直接通向文件对象。

public PrintWriter(String filepath)打印流直接通向文件路径。

方法:

public void print(XXX xxx)打印任意类型数据出去。

PrintStream和PrintWriter的区别:

补充:输出语句的重定向

格式:

PrintStream ps = new PrintStream(“文件地址”)

System.setOut(ps);

作用:属于打印流的应用,可以把输出语句的打印位置改到文件。

 

 

 

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

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

相关文章

JeeSite 平台 Spring Boot 3 体验版发布,一个 Java 快速开发平台

引言 是时候为 Spring Boot 3 做准备了,2018年2月 Spring Boot 进入 2.0 时代,距今已经 5 年了。2022 年 11 月 Spring Boot 3.0 正式发布,它将基于 Spring Framework 6.0,并且需要 Java 17 版本,同时它也将是 Jakart…

YOLOv5改进 | 注意力机制 | 通道和空间的双重作用的CBAM注意力机制

在深度学习目标检测领域,YOLOv5成为了备受关注的模型之一。本文给大家带来的是通道和空间的双重作用的CBAM注意力机制。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方…

Kafka效率篇-提升效率三板斧

kafka在效率上做了很多的努力。最初的一个使用场景是处理网页上活跃的数据,它往往有非常大的体量,每个页面都能产生数十条写入。而且我们假设每条消息都会被至少一个消费者消费(通常是多个),因此,我们努力让…

对称加密介绍

一、什么是对称加密 对称密钥算法(Symmetric-key algorithm),又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。 对称加密的特点是,在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。 这…

智慧公厕:数据驱动的公共厕所智慧化管理

公共厕所作为城市基础设施的重要组成部分,对于城市居民的生活质量和城市形象有着不可忽视的影响。然而,传统的公共厕所管理模式存在诸多问题,如设施老化、卫生状况不佳等,严重限制了公众对于公共厕所的使用体验。随着大数据和智能…

ViLT 浅析

ViLT 浅析 论文链接:ViLT 文章目录 ViLT 浅析创新点网络结构总结 创新点 本文先分析了4种不同类型的Vision-and-Language Pretraining(VLP) 其中每个矩形的高表示相对计算量大小,VE、TE和MI分别是visual embedding、text embedding和modality interact…

类型注解-Python

师从黑马程序员 类型注解的语法 类型注释的限制 import json import randomvar_1 : int10 var_2 : str"itheima" var_3 : boolTrueclass Student:pass stu :StudentStudent()my_list:list [1,2,3] my_tuple:tuple(1,2,3) my_dict:dict{"itheima":666}my_l…

智慧安监中的物联网主机E6000

物联网主机E6000的研发背景主要源于我国对物联网技术在安全生产、环境监测、火灾预警与防控、人员定位与紧急救援等领域的迫切需求。近年来,随着物联网技术的飞速发展,我国政府对智慧安监的重视程度不断提升,相关的政策扶持力度也在加大。在这…

乡村振兴与数字乡村建设:加强农村信息化建设,推动数字乡村发展,提升乡村治理和服务水平,构建智慧化的美丽乡村

目录 一、引言 二、数字乡村建设的必要性 1、推动农村经济转型升级 2、提升乡村治理水平 3、改善乡村民生福祉 三、数字乡村建设的现状与挑战 1、现状 2、挑战 四、数字乡村建设的未来发展路径 1、加强农村信息化基础设施建设 2、提升农民信息素养和技能水平 3、制…

解锁Spring Boot数据映射新利器:深度探索MapperStruct

解锁Spring Boot数据映射新利器:深度探索MapperStruct MapperStruct 是一个强大的 Java 映射工具,它的主要作用是简化对象之间的映射操作。在 Spring Boot 应用程序中,MapperStruct 通常用于将领域模型对象(Domain Model&#xff…

17_基于Flash和RAM的的文件系统选择

嵌入式系统常见文件系统 本文主要讲述在嵌入式系统中,常见的基于flash和内存(RAM)的文件系统类型,具体选择要结合实际需求灵活选配。 一、基于 Flash 的文件系统 基于 Flash 的文件系统主要包括 JFFS2、 YAFFS、 Cramfs 和 Romfs 等,各种文件系统具有不同的特点,本文将分…

基于微信小程序的预约挂号系统(源码)

博主介绍:✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅&#x1f447…

【免费】2024年全新超强版本itvboxfast如意版影视APP源码 TV+手机双端后台PHP源码

首先,让我们了解一下ITVBox如意版影视源码的特点和优势。这一源码基于先进的技术和框架开发,具有稳定、高效的性能,能够满足影视网站的各种需求。与此同时,该源码还提供了丰富的功能和模块,包括影视资源管理、会员系统…

C语言——文件相关操作补充

一、文件读取结束的判定 当我们使用例如fgetc、fgets、fscanf、fread等函数来读取文件内容时,我们可能遇到需要判断文件读取的结束,一般情况下都是通过这些函数的返回值来判断文件读取是否结束。 1、fgetc 返回读取的字符的ASCII值,如果读…

能源效率:未来可持续发展的全球当务之急

当前全球正面临着严重的能源与气候危机,能源消耗不断增长导致环境污染、气候变化等问题日益严重。在这一背景下,提高能源效率成为了当务之急。今天,我们来简要探讨一下能源效率在全球可持续发展中的重要性,重点关注建筑物能源效率…

了解当前经济,VBA一键获取不同货币实时汇率

了解当前经济数据,VBA一键获取不同货币间实时汇率 当下较火的经济新闻:黄金价格、日元贬值、美元加息等,咱们不去分析了解这些经济变动背后的动机及原因,做一点本份的事,如何用VBA获取不同货币之间的实时汇率。这肯定是需要联网的,现从“外汇查询” 网站(https://www.wa…

Django国际化与本地化指南

title: Django国际化与本地化指南 date: 2024/5/12 16:51:04 updated: 2024/5/12 16:51:04 categories: 后端开发 tags: Django-i18n本地化-L10n多语言国际化翻译工具表单验证性能优化 引言 在数字化时代,网站和应用程序必须跨越地域限制,服务于全球…

微信小程序踩坑,skyline模式下,简易双向绑定无效

工具版本 基础库版本 Skline模式 页面json设置 问题描述 skyline模式下,textarea,input标签设置简易双向绑定 model:value是无效的,关闭skyline模式就正常使用了 截图展示 这里只展示了textarea标签,input标签的简易双向绑定也是无效的 总结 我在文档里面是没找到skyline里面不…

第3周 后端微服务基础架构与前端项目联调配备

第3周 后端微服务基础架构与前端项目联调配备 1. 微服务项目层次设计与Maven聚合1.1 项目层次设计1.2 父项目pom1.2.1 打包方式 1.3 创建通用 ************************************************************************************** 1. 微服务项目层次设计与Maven聚合 1.1…

【JS红宝书学习笔记】第3章 语言基础

第3章 语言基础 1. 语法 标识符(变量、函数、属性或函数参数的名称):一般使用驼峰法命名,关键字、保留字、true、false 和 null 不能作为标识符。 标识符的第一个字符必须是一个字母、下划线(_)或美元符号…