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

目录
  • 一.基本文件操作
    • 获取及判断文件属性
    • 创建及修改文件
  • 二.文件读写
    • 读文件
    • 写文件

一.基本文件操作

获取及判断文件属性

代码示例如下:

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文件管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java编写的文件管理器代码分享

    比较适合新手.逻辑上仍然有点问题.可以用于学习java文件操作 下载地址:http://yun.baidu.com/share/link?shareid=4184742416&uk=1312160419 下面是主要的JAVA文件操作代码 FileHelp.java package self.yy.filesystem.fileutil; import android.content.Context; import android.util.Log; import android.widget.T

  • Java实战之简单的文件管理器

    示例图 可以在指定目录下实现文件的创建.文件夹的创建.文件的复制.粘贴.删除.重命名.返回上一级目录.以及不同设备之间文件的发送 完整代码 package com.atguitu.java; public class FileDemo { public static void main(String[] args) { FileSystem fs = new FileSystem(); fs.start(); } } package com.atguitu.java; import java.a

  • java使用JSCH实现SFTP文件管理

    本文实例为大家分享了java使用JSCH实现SFTP文件管理的具体代码,供大家参考,具体内容如下 一.连接配置 1.在项目中导入jsch-0.1.51.jar包: 2.创建SFTP类,存放连接属性,其中要注意一点,在进行FTP操作时,一个会话在建立连接通道后进入A目录进行文件操作,不能直接跳到同级或上级目录操作,需要先退出当前会话或者新建会话. public class SFTP{ private Session session;//会话 private Channel channel;//连接

  • Java中文件管理系统FastDFS详解

    什么是FastDFS 很多以文件为载体的在线服务,如相册网站.视频网站等,都需要对文件进行管理,包括文件的存储.同步.访问(文件上传.文件下载)等,同时肯定会伴随着大容量存储和负载均衡的问题. 在日常的一些项目中,比如做用户的KYC认证等,也需要存储文件.图片.视频等.此时可以选择使用OSS云服务,也可以自己构建相对专业的文件管理系统. FastDFS是一个开源的轻量级分布式文件系统,用于解决大数据量存储和负载均衡等问题,并需要通过专有API进行访问.满足大容量文件存储问题,并保证高性能和高扩展

  • java property配置文件管理工具框架过程详解

    这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 property property 是 java 实现的 property 框架. 特点 优雅地进行属性文件的读取和更新 写入属性文件后属性不乱序 灵活定义编码信息 使用 OO 的方式操作 property 文件 支持多级对象引用 快速开始 环境依赖 Maven 3.x Jdk 1.7+ Maven 引入依赖 <depende

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

    目录 一.基本文件操作 获取及判断文件属性 创建及修改文件 二.文件读写 读文件 写文件 一.基本文件操作 获取及判断文件属性 代码示例如下: 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.getPa

  • java中Hibernate面试知识点整理

    作为常用的框架之一,Hibernate在面试的时候难免会被问到.好在涉及的都是一些理论方面的知识点,比如概念.原理.使用之类的.我们在面试之前可以针对这方面的题目,做一个充足的准备,即使有些人对hibernate框架的了解并不深入.下面我们就hibernate框架中常见的面试题带来介绍. 1. 为什么要使用 hibernate? (1).对JDBC做了轻量级的封装,简化了数据访问层编码. (2).Hibernate是一个ORM框架,开发者可以使用面向对象的思想操作数据库,使用更加方便. (3)

  • python文件操作相关知识点总结整理

    本文汇总了python文件操作相关知识点.分享给大家供大家参考,具体如下: 总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录:os.removedirs(r"c:\python&q

  • Java二进制操作(动力节点Java学院整理)

    移位 位运算中大多数操作都是向左移位和向右移位.在Java中,这对应着<<和>>这两个操作符,示例如下: /* 00000001 << 1 = 00000010 */ 1 << 1 == 2 /* 00000001 << 3 = 00001000 */ 1 << 3 == 8 /* 11111111 11111111 11111111 11110000 >> 4 = 11111111 11111111 11111111 1

  • Java Springboot 重要知识点整理汇总

    1.springboot controller 单例 Spring中 controller默认是单例的,因为单例所以不是线程安全的. 所以需要注意下面几点 不要在Controller中定义成员变量,可能会造成数据混乱. 万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式. 在Controller中使用ThreadLocal变量解决多线程问题 spring bean作用域: singleton:单例模式,当spring创建appli

  • Java中面向对象的知识点总结

    一.对象和类的概念 类:对具有相同属性和方法的一类事物的抽象. 对象:具体的某一事物,代表自身的一些属性和方法. 二.类(对象)之间的关系 关联(组合.聚合),继承,依赖.实现 三.面向对象设计思想 面向对象--->考虑哪些类,对象--->类和对象有属性.方法----->类和类之间的关系 四.重载.重写和隐藏 1). 重载(overload): 方法重载就是多个方法名称相同但是参数类型或者参数个数不同的方法,与返回值类型和修饰符无关 class Test { public int tes

  • java selenium操作弹出对话框示例讲解

    Web 开发人员通常需要利用JavaScript弹出对话框来给用户一些信息提示, 包括以下几种类型 阅读目录 对话框类型 测试页面 Selenium 操作对话框的代码 对话框类型 1.  警告框: 用于提示用户相关信息的验证结果, 错误或警告等 2. 提示框: 用于提示用户在当前对话框中输入数据,一般需要用户单击取消或者确认按钮 3. 确认框: 用于提示用户确认或者取消某个操作,一般需要用户单击取消或者确认按钮 测试页面 用如下页面为例进行讲解, 包括了警告框,提示框,确认框 http://si

  • Java中的循环笔记整理(必看篇)

    一.循环的类型: 1.for循环 class For{ public static void main(String[] args) { System.out.println("Hello World!"); System.out.println("Hello World!"); System.out.println("Hello World!"); System.out.println("Hello World!"); Sy

  • java selenium 操作弹出窗口示例代码

    selenium 中如何处理弹出窗口 阅读目录 原理 测试页面的HTML Java 代码 原理 在代码里, 通过         Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄,   然后遍历,  使用swithcto.window(newwindow_handle)方法. 就可以定位到新的窗口 测试页面的HTML <html> <head> <title>常见web

  • Vue面试题及Vue知识点整理

    看面试题,只是为了查漏补缺,看看自己那些方面还不懂.切记不要以为背了面试题,就万事大吉了,最好是理解背后的原理,这样面试的时候才能侃侃而谈.不然,稍微有水平的面试官一看就能看出,是否有真才实学还是刚好背中了这道面试题.(都是一些基础的vue面试题,大神不用浪费时间往下看) 一.对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写.Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑.View 代表UI 组件,它负责将数据模型转化成UI 展现出来

随机推荐