`
liuwei1981
  • 浏览: 772294 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:161264
社区版块
存档分类
最新评论

89.文件操作初步

 
阅读更多

1 基本文件操作

 

 

 

在Java中,提供了对文件以及目录进行操作的File类。注意,在Java中,对目录的操作也是通过这个类来完成的,并没有单独为目录定义相应的类。File类放在java.io包中。

 

 


在Java中,将路径也当作File类来处理。它并没有为路径特别设置一个类。路径名中除了最后一个之外每个字段都表示一个目录;最后一个字段可能表示一个目录或文件名。路径名可以是绝对的,也可以是相对的。绝对路径名包含了定位它所表示的文件所需要的全部信息,而相对路径名则不然,必须依据其他路径名的信息进行解释。

在默认情况下,系统总是依据当前用户的工作路径来解释相对路径,这个路径是由系统属性“user.dir”确定的,并且通常就是Java虚拟机从其中启动的那个目录。


可以使用多种格式创建File类对象,例如:
File file;
//以当前工作路径下的Test.java文件来创建一个File对象


file = new File("Test.java"); 
//以目录E:\ex\下的文件Test.java来创建一个File对象


file = new File("E:\\ex\\","Test.java");
//以文件E:\ex\Test.java来创建一个File对象,和上一句效果一样


file = new File("E:\\ex\\Test.java");
//以目录E:\ex\来创建一个File对象


File path = new File("E:\\ex\\");
//以File对象path路径下的Test.java来创建一个对象


File file = new File(path, "Test.java");


因为在Java中,反斜杠“\”是转义符,所以在使用它来表示Windows目录的分割符的时候,需要用“\\”来表示。另外,在各种操作系统中,对于文件路径都有不同的表示方式,比如,在Unix/Linux/BSD和其他类Unix系统中,通过在路径前面的“/”表示根目录,如果一个路径中的最前面有“/”标记,则说明这个路径是绝对路径;而在Windows中,通过盘符和“\”来表示绝对路径,可以通过类File的字符串常量seperator,可以获得对应目标操作系统上的路径分割符。在Java中,File类定义的是一个抽象的、与操作系统无关的类。


需要提醒注意的是,在创建File对象的时候,它并不会在磁盘上产生一个路径或文件。创建一个File对象只是创建了一个表示相应的文件或路径的File类的实例。


在File这个类中,定义了很多的方法用于对文件或目录进行操作。下面列出一些比较常用的一些方法:

 

文件名相关
String  getName():返回此File对象所表示的文件名或目录名(如果是目录的话,返回最后一级子目录名);
String  getPath():返回此File对象所对应的路径;
String  getAbsolutePath():返回此File对象所对应的绝对路径名;
String  getParent():返回此File对象对应目录(最后一级子目录)的父目录路径名;
boolean  renameTo(File newName):重命名此File对象对应的文件,如果重命名成功,返回true,否则返回false。

 

文件检测
boolean  exists():判断文件对象的文件或目录是否存在。
boolean  canWrite():判断目录或文件是否可写。
boolean  canRead():判断目录或文件是否可读。
boolean  isFile():判断File对象指向的是否为一个文件。
boolean  isDirectory():判断File对象指向的是否为一个目录。
boolean  isAbsolute():判断文件对象的路径是否是绝对路径。这取决于不同的操作系统,在Unix/Linux/BSD等系统上,如果路径的开头是“/”,说明它是一个绝对路径,而在Windows上,如果路径的开头是盘符,或者路径是由“\”来分割的,则说明它是一个绝对路径。


获取常规文件信息
long lastModified():返回此File对象所对应文件的最后一次被修改时间。long型返回值表示此文件最后一次被修改的时间,注意,在这边返回的不是日期,而是从格林威治时间(GMT)1970年1月1日00:00:00以来的毫秒数;
long length():返回文件的长度;

 

文件操作
boolean createNewFile():自动创建一个File对象中指定文件名的空的文件,只有在指定文件名文件不存在的时候才能成功;
boolean delete():删除File对象对应的文件或目录;
File createTempFile(String prefix,String suffix):在默认的临时目录下创建一个临时文件,文件名由前缀prefix、系统生成的随机数和后缀suffix指定,返回一个表示新创建的临时文件的File 对象;
File createTempFile(String prefix,String suffix,File directory):在指定的目录directory下创建一个临时文件,文件名由前缀prefix、系统生成的随机数和后缀suffix指定,返回一个表示新创建的临时文件的File 对象;
void deleteOnExit():在Java虚拟机退出的时候,请求删除对象所指定的文件。

 

目录操作
boolean mkdir():试图新建一个File对象所定义的一个路径,如果新建成功,返回true,否则,返回false。此时File对象必须是目录对象。
String[] list():只对File对象为目录时有效,返回这个目录下的所有文件以及子目录;
File[] listFiles():返回File对象表示的路径下的所有文件对象数组。

 

下面我们来看一个示例,熟悉上述方法的使用。

import java.io.File;
import java.io.IOException;

public class FileOper {
 public static void main(String[] args) {
  File f = new File("c:\\JDK14");

  try {
   // 在f指定的目录下创建一个临时文件
   f.createTempFile("myTmp", ".linshi", f);
  } catch (IOException e) {
   System.out.println(e.getMessage());
  }

  // 获得目录下的所有文件和子目录
  File[] files = f.listFiles();
  for (int i = 0; i < files.length; i++) {
   if (files[i].isFile()) {
    System.out.println("文件:" + files[i]);
   } else {
    System.out.println("目录:" + files[i]);
   }
  }
 }
}


运行这个FileOper应用,将会生成一个myTmpXXXX.linshi的临时文件,然后,通过File对象的listFiles()方法,返回一个File对象,并且将这些对象按照文件或者目录打印出来:在输出它们的完整路径名称之前,指明它们的类型。下面是应用执行的结果:
目录:c:\JDK14\bin
文件:c:\JDK14\COPYRIGHT
目录:c:\JDK14\demo
目录:c:\JDK14\include
目录:c:\JDK14\jre
目录:c:\JDK14\lib
文件:c:\JDK14\LICENSE
文件:c:\JDK14\myTmp12363.linshi
文件:c:\JDK14\readme.html
文件:c:\JDK14\README.txt
目录:c:\JDK14\src
文件:c:\JDK14\src.zip


注意这里的临时文件“myTmp12363.linshi”,它在指定的前缀“myTmp”和后缀“.linshi”之间加入了一个随机数,以防止文件名的重复。重复执行这个程序,将生成不同文件名的临时文件,格式为“myTmpXXXXX.linshi”,其中“XXXXX”会不断变化。


File类中的其他方法的使用,在此不一一举例,请读者参考API文档和上面的方法说明使用它们。


2 文件过滤

 

 

 

在File类的list()方法中,可以接受一个参数FileNameFilter,通过它,可以只将一些符合条件的文件列出来。

 

 


FileNameFilter是一个接口,它只有一个accept()方法,所以,只需要自己定义一个类实现这个接口,并且将接口中的accept()实现,然后将它作为File的list()方法的参数就可以实现文件的过滤功能。注意,只需要将FileNameFilter对象作为list()方法参数就可以了,不需要在程序中调用accept()方法,程序在运行过程中会自动调用这个方法来过滤文件,它是一个回调方法(callback method)。


下面我们来看一个使用过滤器来过滤文件的例子。


 

import java.io.*;

/**
 * 功能:按照扩展名过滤文件(Java)
 *
 * @version v1.0
 */
public class JavaFilter implements FilenameFilter {
 /**
  * 只接受java文件
  *
  * @see JavaList
  * @param args
  *            Path,FileName
  * @return true or false
  */

 public boolean accept(File dir, String name) {
  return name.endsWith(".java");
 }
}


这个类JavaFilter实现了FileNameFilter接口,并且实现了accept()方法,它将根据文件扩展名是否为.java来过滤文件。


下面是使用这个JavaFilter来过滤文件的例子。


 

import java.io.*;

/**
 * 功能:把某个路径下的文件,通过JavaFilter过滤后(只返回)java文件,输出到屏幕
 *
 * @author alex wen
 * @version v1.0
 */

public class JavaList {
 /**
  * @param Path
  * @return java files
  */
 public static void main(String args[]) {
  if (args.length != 1) {
   System.out.println("Usage:java JavaList <directory>");
   System.exit(0);
  }
  String dir = args[0];
  File currDir = new File(dir);
  String[] javaFiles = currDir.list(new JavaFilter());
  for (int i = 0; i < javaFiles.length; i++) {
   System.out.println(javaFiles[i]);
  }
 }
}


这个程序将刚才定义的JavaFilter类当作File类的list()方法的参数,因此,它能够将指定路径下的所有java文件列出来。

分享到:
评论

相关推荐

    (175797816)华南理工大学信号与系统Signal and Systems期末考试试卷及答案

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    深圳建设施工项目安全生产奖惩管理制度.docx

    深圳建设施工项目安全生产奖惩管理制度

    离散数学课后题答案+sdut往年试卷+复习提纲资料

    离散数学课后题答案+sdut往年试卷+复习提纲资料

    自考04741计算机网络原理真题及答案及课件

    04741计算机网络原理 2018(尚德).pdf 13年试题(2套).pdf 2015年10月自考计算机网络原理04741试题及答案解析.docx 2021年4月自考04741计算机网络原理真题及答案.docx 2021年4月自考04741计算机网络原理试卷.bak.docx 计算机网络原理 课后题答案 全 李全龙版 自考04741.zip.zip 计算机网络原理课件 计算机网络原理课件.rar

    C++实现rpc,全程手写

    C++实现rpc,全程手写

    前端拿到的列表数据里id都一样的处理办法.txt

    前端拿到的列表数据里id都一样的处理办法.txt

    最新仿720云全景制作源码-krpano仿720云全景网站源码 新增微信支付+打赏+场景红包

    最新仿720云全景制作源码|krpano仿720云全景网站源码(新增微信支付+打赏+场景红包等)是一款基于php+mysql开发制作的全景在线制作网站源码,包含全景图片,全景视频等。数据存储全部存于OSS云端或本地,源码完全开源可自行二次开发。 环境要求:PHP5.5.X+MYSQL5.6.X+伪静态 熟悉linux系统推荐使用LAMP,web服务器最好使用apache,不要使用nginx(发布大全景图需要时间可能需要20多分钟, nginx超时机制不好控制)。 Windows系统推荐使用phpstudy。Liunx推荐宝塔控制面板apache 前端为HTML5开发,自适应手机版! 1、支持VR虚拟现实、全景视频、环物全景、说一说、点赞评论、重力感应、智能视频嵌入、场景切换热点、加载进度条、 地图导航、光晕flash特效、物体全景嵌入、场景自播、场景解说、雷达导航等业内前沿功能。 2、支持windows、Linux、Mac、安卓、IOS等几乎所有的系统观看。支持CDN图片转存,极大的减轻的服务器流量费用。 3、支持用户权限分配。方便会员制收费。

    YOLO算法-可乐罐子数据集-336张图像带标签-可乐.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    环境监测系统源代码全套技术资料.zip

    环境监测系统源代码全套技术资料.zip

    【编码解码】基于matlab罗利衰落信道编解码器设计【含Matlab源码 9930期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    四轮转向系统横摆角速度控制simulink仿真模型,利用滑模控制算法,基于八自由度车辆模型,控制有比较好的效果,附参考说明

    四轮转向系统横摆角速度控制simulink仿真模型,利用滑模控制算法,基于八自由度车辆模型,控制有比较好的效果,附参考说明。

    YOLO算法-工作场所安全隐患数据集-859张图像带标签-倒下的工人-配备个人防护装备的工人-无个人防护装备的工人-火.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    自学考试02331数据结构试题及答案2021-2022

    02142数据结构导论历年真题及答案(2012-2018共13套).rar 02331数据结构历年真题共267页2009.10-2019.4.rar 24数据结构201704_8.pdf 25数据结构201710_10.pdf 26数据结构201804_11.pdf 27数据结构201810_9.pdf 全国2021年04月高等教育自学考试02331数据结构试题及答案.docx 全国2022年04月高等教育自学考试02331数据结构试题及答案.docx 数据结构-课件.rar 第l六讲.ppt 第一讲.ppt 第七讲.ppt 第三讲.ppt 第九讲.ppt 第二讲.ppt 第五讲.ppt 第八讲.ppt 第四讲.ppt

    验收确认单表格.docx

    验收确认单表格.docx

    内存搜索工具(易).rar

    内存搜索工具(易).rar

    饮食管理系统项目源代码全套技术资料.zip

    饮食管理系统项目源代码全套技术资料.zip

    计算机视觉项目:Swin-Transformer 【tiny、small、base】模型实现的图像识别项目:番茄病害图像分类

    【项目简介】 代码主干网络采用Swin-Transformer 家族系列,包括【tiny、small、base】三种模型。pretrained和freeze_layers参数为是否采用官方预训练模型和是否仅训练分类头。为了做对比消融试验,优化器采用了Adam和SGD、AdamW三种。损失函数采用多类别的交叉熵、学习率优化策略采用cos余弦退火算法 【评估网络】 评估的指标采用loss和准确率(accuracy),分别会在训练集和验证集上进行评估、输出、绘制曲线图像。同时会在训练集、验证集进行一系列评估,包含混淆矩阵、recall、precision、F1 score等等曲线图像,以及recall、precision、F1 score、特异度的输出信息等等。 【具体各类别的指标在json文件中查看】 【如果想要更换数据集训练,参考readme文件】 【本项目为8种番茄病害图片(约4k张数据),包含数据集和标签,可以一键运行】

    (177121232)windows电脑下载OpenHarmony鸿蒙命令行工具hdc-std

    windows电脑下载OpenHarmony鸿蒙命令行工具hdc_std。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    小程序毕业设计项目-音乐播放器

    本项目可以作为小程序毕设项目,主要功能为音乐播放器,主要功能是:可以播放歌曲(采用mp3网络连接实现)、专辑封面播放时可以旋转,能够实现开始和暂停播放,可以点击下一首歌曲,主页面实现动态轮播图

    考研学习分享-JAVA-基于Vue+SpringBoot的考研学习分享平台设计与实现(毕业论文)

    考研学习分享功能的描述可以涵盖以下几个主要模块,旨在为考研学生提供一个互动、资源共享、经验交流的平台: 1. 用户注册与个人信息管理 学生可以通过邮箱或手机号注册账户,填写个人信息,如姓名、专业、目标院校等。 用户可设置学习目标和进度,方便记录自己的学习历程。 2. 学习资料共享 用户可以上传、下载考研相关学习资料,如教材、真题、笔记、复习计划等。 提供文件分类功能,按学科、院校、难度等进行整理,方便用户查找。 支持多种文件格式,如PDF、Word、Excel、图片等。 3. 复习经验分享 学生可以发布自己的复习经验文章,分享复习方法、备考心得、时间管理技巧等。 提供文章评论和互动功能,其他学生可以点赞、评论、提问,促进经验交流。 设置专栏或专题,帮助学生快速找到自己感兴趣的复习内容。 4. 考研小组与社交功能 学生可以创建或加入学习小组,组内成员可共享资料、讨论问题、互相鼓励。 提供私信、群聊功能,方便学员在小组内进行实时讨论和交流。 支持设置小组学习目标和定期检查进度,增加学习动力。 5. 在线课程与讲座 提供考研各科目(如英语、数学、政治等)的在线课程资源,用户可以报名参加。

Global site tag (gtag.js) - Google Analytics