iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java文件管理操作的知识点整理
  • 387
分享到

Java文件管理操作的知识点整理

2024-04-02 19:04:59 387人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一.基本文件操作获取及判断文件属性创建及修改文件二.文件读写读文件写文件一.基本文件操作 获取及判断文件属性 代码示例如下: import java.io.IOException

一.基本文件操作

获取及判断文件属性

代码示例如下:

import java.io.IOException;
 
public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
 
        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
        //创建文件前
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println("---------------");
        //创建文件后
        file.createNewFile();
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        //删除文件
        System.out.println("--------------");
        file.delete();
        System.out.println(file.exists());
    }
}

getParent():获取上级目录,若无指定则返回null

getName():获取当前文件名

getPath():获取以工作目录为基准的相对路径

getAbsolutePath():获取以盘头为起始点的绝对路径

getCanonicalPath():同上,但是会进行一些精简

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

isDirectory():判断文件是否是目录

isFile():判断文件是否是文件

delete():删除文件

上述代码的运行结果如下:

创建及修改文件

import java.io.File;
import java.io.IOException;
 
public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
 
        file.createNewFile();
        //退出时删除
        file.deleteOnExit();
        System.out.println(file.exists());
    }
}

deleteOnExit():退出时删除

createNewFile():创建对应文件

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("./test");
        //创建单级目录
        file.mkdir();
 
        //创建多级目录
        File file1 = new File("test1/a/11");
        file1.mkdirs();
    }
}

上述代码运行结果如下:

mkdir():根据路径创建单级目录

mkdirs():根据路径创建多级目录

public class test {
    public static void main(String[] args) throws IOException {
        File file1 = new File("test");
        File file2 = new File("test1");
        //重命名
        file1.renameTo(file2);
 
    }
}

renameTo():将一个文件的名字赋值给另一个文件

二.文件读写

读文件

字节流

我们事先准备一个test.txt文件,里面包含内容"Hello".

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
        //打开文件
        InputStream inputStream = new FileInputStream("text1.txt");
        //读文件
        while(true){
            int b = inputStream.read();
            if(b == -1){
                break;
            }
            System.out.println(b);
        }
        //关闭文件
        inputStream.close();
 
    }
}

实际上,read()有很多个版本,具体如下:

上述代码中使用的是第一个版本,一次读取一个字节,并将这个字节的内容作为返回值返回,如果读取到文件结束符(EOF),则返回-1.

第二个版本要求一个"输出型参数"---一个字节数组.read()会从文件里把内容全部读入该字节数组中,若溢出则截断.

第三个版本与第二个版本相似,只不过允许通过参数控制数据的传入起点和终点(也即允许传入的数据长度).

上述代码的运行结果如下:

可见读取的是"Hello"每个字符对应的ASCII码值.

这样可读性无疑是很低的,我们可以将其转为字符串的形式输出,代码示例如下:

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
        //打开文件
        InputStream inputStream = new FileInputStream("text1.txt");
        //读文件
        byte[] b = new byte[1024];
        int len = inputStream.read(b);
 
        String s = new String(b,0,len,"utf8");
        System.out.println(s);
        //关闭文件
        inputStream.close();
 
    }
}

我们可以通过读出来的字节数组,反向构造出其原本的字符串,这样就能得到"Hello"了,但这样无疑很麻烦.因此,对于这种非二进制的数组,我们可以使用字符流.

字符流

字符流对应着Reader和FileReader两个关键字.

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
        //打开文件
        Reader reader = new FileReader("text1.txt");
 
        char[] buffer = new char[1024];
        int len = reader.read(buffer);
 
        for (int i = 0; i < len; i++) {
            System.out.print(buffer[i]);
        }
        
        reader.close();
    }
}

这样输出出来的直接就是"Hello",而不是ASCII码值.

其他要点

1.InputStream和Reader两个都是抽象类,没办法直接实例化.因此我们需要借助他们的子类FileInputStream和FileReader来实例化.

2.我们创建的文件都在硬盘上,直接操作的话比较困难.因此我们尝试在内存上创建一个媒介,间接的操作硬盘上的文件.我们将InputStream和Reader这种媒介成为句柄(Handler).

3.上述代码的写法实际上是不严谨的,因为一旦程序在运行途中抛出了异常,代码末尾的close()就无法执行.因此我们应该把close()放在finally下.保证在文件描述符表上的资源得以释放.

4.关于文件描述符表:文件描述符表可以简单理解成PCB中的一个数组/顺序表.数组中的每个元素都对应着当前进程打开的文件.这个数组的下标,就称为"文件描述符".每当我们打开一个文件时,就会在文件描述符表中占据一个位置;每次关闭文件,都会释放一个位置.然而文件描述表的长度是存在上限的,如果在进程中一直打开文件而不释放,这就会导致进程在后续打开文件的时候抛出异常.

5.实际上,我们有一套更实用的方法从文件中读取内容,代码示例如下:

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
 
        InputStream inputStream = new FileInputStream("text1.txt");
        Scanner scanner = new Scanner(inputStream);
 
        String s = scanner.next();
 
        System.out.println(s);
    }
}

我们可以将InputStream作为Scanner构造函数的参数,这样我们就可以使用Scanner灵活读取文件内部的内容.

写文件

字节流

对于字节流的输入方式,我们有OutputStream和FileOutputStream这一套组合. 

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
 
        try(OutputStream outputStream = new FileOutputStream("text1.txt")){
            outputStream.write('h');
            outputStream.write('e');
            outputStream.write('l');
            outputStream.write('l');
            outputStream.write('o');
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

字符流

对于字符流的输入方式,我们有Writer和FileWriter这一套组合.

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text1.txt");
        file.createNewFile();
 
        try(Writer writer = new FileWriter("text1.txt")){
            writer.write("hello");
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

字节流封装

与读取文件内容部分一样,我们可以将字节流封装,其可以灵活的向文件内写内容. 

public class test {
    public static void main(String[] args) throws IOException {
        File file = new File("text.txt");
        file.createNewFile();
 
        try(OutputStream outputStream = new FileOutputStream("text.txt")){
            PrintWriter printWriter = new PrintWriter(outputStream);
            printWriter.println("hello");
            printWriter.flush();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

此处封装过后,就可以如常规输出一样,向文件里输入内容.代码中flush()的作用在于清空输入缓冲区的内容,使println()输出的内容能成功到文件中.

其他要点

上述代码中我们把OutputStream等输入输出流放在try()中,其目的是在代码结束后可以自动调用close()方法释放文件描述符表,防止忘记.这要求这个类要实现Closeable接口.

到此这篇关于Java文件管理操作的知识点整理的文章就介绍到这了,更多相关Java文件管理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java文件管理操作的知识点整理

本文链接: https://www.lsjlt.com/news/167803.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java文件管理操作的知识点整理
    目录一.基本文件操作获取及判断文件属性创建及修改文件二.文件读写读文件写文件一.基本文件操作 获取及判断文件属性 代码示例如下: import java.io.IOException...
    99+
    2024-04-02
  • Python操作JSON文件的知识点整理
    目录json 模块读取 JSON写入 JSON读取与写入基本用法如下json 模块进阶用法控制输出格式在 JSON 中存储 Python 特殊类型对数据进行验证和清洗第三方模块jso...
    99+
    2023-01-28
    Python操作JSON知识点 Python操作JSON Python JSON
  • Vue重点知识点整理
    本篇内容主要讲解“Vue重点知识点整理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue重点知识点整理”吧!一、对于MVVM的理解?MVVM 是 Model-...
    99+
    2024-04-02
  • spark的基础知识点整理
    这篇文章主要介绍“spark的基础知识点整理”,在日常操作中,相信很多人在spark的基础知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”spark的基础知识点整理”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • Html5的基础知识点整理
    这篇文章主要介绍“Html5的基础知识点整理”,在日常操作中,相信很多人在Html5的基础知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Html5的基础知识点整理”...
    99+
    2024-04-02
  • linux的基础知识点整理
    这篇文章主要介绍“linux的基础知识点整理”,在日常操作中,相信很多人在linux的基础知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux的基础知识点整理”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-13
  • CSS基础知识点整理
    本篇内容介绍了“CSS基础知识点整理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CSS基础  CSS选择器 ...
    99+
    2023-06-05
  • mysql性能知识点整理
    这篇文章主要讲解了“mysql性能知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql性能知识点整理”吧! my...
    99+
    2024-04-02
  • JavaScript数组知识点整理
    本篇内容介绍了“JavaScript数组知识点整理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JavaS...
    99+
    2024-04-02
  • vue常用知识点整理
    什么是 mvvm? MVVM 是 Model-View-ViewModel 的缩写。mvvm 是一种设计思想。Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的...
    99+
    2024-04-02
  • React的基础知识点整理
    这篇文章主要介绍“React的基础知识点整理”,在日常操作中,相信很多人在React的基础知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React的基础知识点整理”...
    99+
    2024-04-02
  • JavaScript闭包知识点整理
    这篇文章主要讲解了“JavaScript闭包知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript闭包知识点整理”吧!在谈闭包之前,我...
    99+
    2024-04-02
  • Java 异常的知识整理
    Java 异常1.继承关系2.Error程序运行时发生的无法被处理的错误,一旦发生,JVM终止执行。3.ExceptionException是程序编译与运行时出现的一种错误,一旦出现,JVM将告知程序员处理。分为两种:运行时异常:在运行时发...
    99+
    2023-05-31
    java 异常 ava
  • oracle事务知识点整理
    这篇文章主要介绍“oracle事务知识点整理”,在日常操作中,相信很多人在oracle事务知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle事务知识点整理”...
    99+
    2024-04-02
  • Python——Day3知识点——文件操
     一、打开文件文件句柄 = open('文件路径', '模式')打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。打开文件的模式有:r,只读模式(默认)。w,只写模式。【不可读;不...
    99+
    2023-01-31
    知识点 文件 Python
  • 整理CocosCreator常用知识点
    目录一、场景加载二、查找节点1,节点查找2,节点其他操作3,停止播放动作以及计时器三、节点属性设置常驻节点四、节点动作五、计时器六、事件监听七、定义全局变量八、分辨率九、音频控制十、...
    99+
    2024-04-02
  • react组件中的constructor和super知识点整理
    1、react中用class申明的类一些小知识 如上图:类Child是通过class关键字申明,并且继承于类React。 A、Child的类型是? typeofChild === ...
    99+
    2024-04-02
  • python整数和变量的知识点整理
    这篇文章主要讲解了“python整数和变量的知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python整数和变量的知识点整理”吧!1.整数Python可以处理任意大小的整数,当然包...
    99+
    2023-06-04
  • JavaScript字符串知识点整理
    这篇文章主要讲解了“JavaScript字符串知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript字符串知识点整理”吧!JavaSc...
    99+
    2024-04-02
  • Java注释、关键字和标识符知识点整理
    本篇内容介绍了“Java注释、关键字和标识符知识点整理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、注释1.Java注释有3...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作