IO流学习笔记--操作文件

最近几天都在学习IO流 本来想着昨天晚上写完这篇总结的 太困也就作罢 今天也是满满4节课 终于拖到晚上有了时间来写这篇博客.

接下来的讨论我分为外部和内部来操作一个文件
整体概述一下文章内容 体系

  • 外部: 即对文件整体进行操作,比如删除,重命名,剪切,获取文件路径之类的操作
  • 内部: 即对txt之类的文本文件的内容操作,比如读写,添加之类的操作

区别 前者是以文件(文件夹 文件)为单位 后者是以文件(txt等文件)内容为单位

首先介绍一下外部的体系内容:

核心类: File 描述的是一个文件或文件夹 通俗一点就是相当关于一个标志 指向了一个地址 那个地址就是文件和文件夹存放的地址

举个例子:
// 检验指定路径下是否存在指定的目录或者文件.
File file = new File("c:\\a.txt");//寻找到了a这个文件
System.out.println(file.exists());
// File对象是否是目录
System.out.println(file.isDirectory());
// 对象是否是文件
System.out.println(file.isFile());

File也可以是个抽象路径 意思就是说 它可以真实存在 也可以表示不存在的文件 可以通过exists()来判断是否存在文件

File创建 需要导包 import java.io.File
1. new File(String url);
2. new File(File parent,String child); //D:\我是文件夹\我是子文件
D:\我是文件夹就是File parent的路径 而我是子文件就是child

注意路径分隔符 Windows是’\’或者单个’/’ 而Linux是’/’
File.separator可以得到对应系统的分隔符
例:new File(“c:” + File.separator + “a.txt”);

路径问题:

绝对路径: 该文件在硬盘上 的完整路径。绝对路径一般都是以盘符开头的。

相对路径: 相对路径就是资源文件相对于当前程序所在的路径。

. 当前路径

.. 上一级路径
File file = new File(“.”);是得到当前的路径
file.getAbsolutePath()可以显示当前路径 也就是绝对路径
File file2 = new File(“..\..\a.txt”);是相对路径 ..表示返回上一个文件层

基础的File讲完了 来介绍一下File的基本操作吧
创建:

  1. createNewFile() //创建一个空的文件
  2. mkdir() //创建一个目录 这只会创建最后一级目录,如果上级目录不存在就抛异常。
  3. mkdirs() 在指定位置创建目录,这会创建路径中所有不存在的目录。
  4. renameTo(File dest) //dest是目标文件

这里就介绍一下renameTo 有两个作用 1.重命名 2.剪切
如果源文件和目标文件是在同一个目录下 那么就是重命名 前提目标文件不存在 不然会冲突
如果源文件和目标文件不是在同一个文件下 那么就是剪切 但是不能对文件夹进行操作

删除

 1. delete() 删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除
 2. deleteOnExit()   一般用于删除临时 文件 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除

判断:

1. exists()     文件或文件夹是否存在。
2. isFile()     是否是一个文件
3. isDirectory()    是否是一个目录
4. isHidden()       是否是一个隐藏的文件或是否是隐藏的目录。
5. isAbsolute() 测试此抽象路径名是否为绝对路径名。

获取:

1. getName()        获取文件或文件夹的名称,不包含上级路径。
2. getAbsolutePath()    获取文件的绝对路径
3. length()     获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
4. getParent()      返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
5. lastModified()   获取最后一次被修改的时间。

举个例子:

File file = new File("..\\..\\a.txt");
    System.out.println("文件名:"+ file.getName());
    System.out.println("获取绝对路径:"+ file.getPath());
    System.out.println("getAbsolutePath获取绝对路径:"+file.getAbsolutePath());
    System.out.println("获取文件的的大小(字节为单位):"+ file.length());
    System.out.println("获取文件的父路径:"+ file.getParent());

    //使用毫秒值转换成Date对象
    long lastModified = file.lastModified();
    Date date = new Date(lastModified); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
    System.out.println("获取最后一次的修改时间(毫秒值):"+ dateFormat.format(date) );

针对文件夹还有其他的操作 这个比较常用

1. staic File[] listRoots() 列出所有的根目录(Window中就是所有系统的盘符)
2. list()   返回目录下的文件或者目录名,包含隐藏文件。 String类型
3. listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。
4. list(FilenameFilter filter)  返回指定当前目录中符合过滤条件的子文件或子目录。
5. listFiles(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。

讲一下 . (当前目录在eclipse作用)
这里写图片描述

我们来看一下.的作用的吧

        File file=new File(".\\src");
        String[] strings=file.list();
        for(String x:strings) {
        System.out.println(x);
        }

结果:
这里写图片描述
由此可知.代表的而是这个项目的当前目录 即day13文件夹 ,而不是所在类的当前目录(虽然x.java所在的haha是文件夹 但是 这里不是当前目录)
再看一个栗子:也可以知道当前目录是day13

File file=new File("src");
        String[] strings=file.list();
        for(String x:strings) {
            System.out.println(x);
    }

结果:
这里写图片描述

这里提一下 FilenameFilter是筛选器
举个例子:

// 自定义一个文件名过滤器
class MyFilter implements FilenameFilter{

    @Override
    public boolean accept(File dir, String name) {
        //System.out.println("文件夹:"+dir+" 文件名:"+ name);
        return name.endsWith(".java");//结尾是.java的返回true
    }

}


public static void main(String[] args) {
    File dir = new File("F:\\1208\\day06\\代码\\day06");
    listJava2(dir);

}

public static void listJava2(File dir){
    File[] files = dir.listFiles(new MyFilter()); //得到文件夹下面的所有子文件与文件夹。
    for(File file : files){
        System.out.println(file.getName());
    }
}

分隔符:了解一下

File.separatorChar 等效separator 与系统有关的默认名称分隔符 // pathSeparatorChar 等效pathSeparator 与系统有关的路径分隔符 ;

这是上篇 还有下篇了解一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 文件拆分是将一个大文件分成多个小文件的过程,这在处理大文件时非常有用。在Java中,可以使用文件字节IO流来实现文件拆分。具体步骤如下: 1. 打开要拆分的文件,创建一个输入流对象。 2. 创建一个输出流对象,用于写入拆分后的文件。 3. 定义一个缓冲区,用于存储读取的数据。 4. 循环读取文件中的数据,每次读取一定大小的数据,将其写入输出流中。 5. 当读取的数据量达到指定大小时,关闭当前输出流,创建一个新的输出流,继续写入数据。 6. 循环结束后,关闭输入流和输出流。 需要注意的是,拆分后的文件名可以根据需要进行命名,可以使用数字、字母或其他符号来区分不同的文件。同时,拆分后的文件大小也需要根据实际需求进行设置,一般建议不要超过2GB。 ### 回答2: Java是一门广泛应用的编程语言,涵盖了众多领域,其中文件输入输出是其中之一。文件字节IO流文件拆分是文件处理中的一项重要功能,在Java中,常用的文件处理类库是java.io库,它包含了Java文件输入输出所需要的各种类,例如File类、FileReader类、FileWriter类、BufferedReader类、InputStream类、OutputStream类等。 Java文件字节IO流文件拆分主要实现通过读取一个大文件,然后将其分割成小的文件块,以便于更好的管理文件,便于数据传输和存储。这种操作依赖于Java的二进制位操作,它的流程如下: 1. 指定待拆分的文件 通过File类下的File对象指定待拆分的文件。 2. 获取待拆分文件的长度 通过File对象的length()方法获取待拆分文件的长度,以便于下一步的拆分操作。 3. 打开输入流 通过InputStream类中的FileInputStream对象打开待拆分文件的输入流,以读取文件内容。 4. 拆分待处理文件 使用byte[]数组作为缓存区读取待处理文件中的内容,并将它分割成小的文件块。 5. 写入分割文件 通过OutputStream类中的FileOutputStream对象打开文件的输出流,将分割的文件块写入新的文件中(例如:文件名末尾加以排序数字)。 6. 关闭输入输出流 操作完成后,关闭输入输出流释放文件资源,避免内存泄漏。 文件字节IO流文件拆分可以适用于很多场景,例如:大型多媒体文件的存储及快速传输、分散式文件处理场景等。在Java中,我们可以根据自己的需要,使用java.io库中的File类、InputStream类、OutputStream类等API进行相关操作。 ### 回答3: Java输入输出(I/O)是Java编程中重要的一个方面。I/O是程序与外部环境交互的重要方式,它允许程序从磁盘文件或其他设备中读取数据,并将计算结果写回磁盘或其他设备。在Java I/O中,文件字节IO流是常用的操作之一。 文件字节IO流是对文件进行字节级别操作的输入输出流。它以字节为单位进行读取和写入文件,每次读取和写入的长度是固定的,一般为1个字节或多个字节。 文件拆分是文件字节流IO操作中的一种常见应用。文件拆分是将文件按照一定的规则分解成多个文件的过程。例如,将一个大文件分成多个小文件,便于存储和传输。文件拆分在数据处理、数据传输等领域都有广泛的应用。 Java中实现文件拆分可以使用文件字节IO流。具体实现可以采用以下伪代码: 1. 打开原文件,创建文件字节输入流; 2. 创建多个文件字节输出流,每个输出流对应一个拆分后的文件; 3. 读取原文件,逐个字节分别写入每个输出流; 4. 当一个拆分后的文件大小达到限制值时,关闭该输出流,创建一个新的输出流继续写入; 5. 当原文件读取完毕时,关闭所有输出流,完成文件拆分。 这里需要考虑的一些问题是如何确定拆分后每个文件的大小,如何命名新的拆分文件等。 在编写文件拆分程序时,需要注意文件拆分的合法性。例如,在分解文件时需要根据文件格式和业务需求来确定分解规则,保证分解后的文件是合法的。同时还需要考虑拆分后的文件如何合并的问题。 综上所述,文件字节IO流文件拆分操作是Java I/O编程中常见的操作之一。实现文件拆分需要充分考虑拆分规则和文件合法性等问题。在实际开发中,我们可以根据具体需求,结合其他API来实现更多复杂的文件操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值