在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一 一个与文件本身操作(创建、删除、重命名等)有关的类,而如果要想进行File类的操作,必须要提供有完整的路径,而后可以调用相应的方法进行处理。
1. File类的基本使用
打开JDK文档可以发现,File类时Comparable接口的子类,所以File类的对象是可以进行排序处理的。在进行File类处理的时候需要为其设置访问路径,那么对于路径的配置主要通过File类的构造方法处理:
public class Fileextends Objectimplements Serializable, Comparable<File>
·构造方法:public File(String pathname),设置要操作完整路径;
·构造方法:public File(File parent,String child),设置父路径与子目录;
如果现在要想进行文件的基本操作,可以使用如下的方法:
·创建新文件:public boolean createNewFile()throws IOException;
·判断文件是否存在:public boolean exists();
·删除文件:public boolean delete();
范例:使用File类创建一个文件(d:\mldn.txt)
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:\\mldn.txt");
if (file.exists()) {
file.delete();// 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
JavaAPIDemo
通过代码可以发现,File类实现的就是文件本身的处理。
2. File类操作深入
1、在实际的软件项目开发和运行的过程之中,往往都会在Windows中进行项目的开发,而在项目部署的时候基于Linux或Unix系统来进行项目发布以保证生产环节的安全性;
在不同的操作系统之中会存在有不同的路径分隔符:Windows分隔符“\”、Linux分隔符"/",所以在最初进行开发的时候就必须考虑不同系统环境下的分隔符的问题,所以为了解决此问题,File类提供有一个常量:public static final String separator;
范例:正常的路径编写
File file = new File("d:" + File.separator + "mldn.txt");
但是随着系统的适应性的不断加强,对于当前的路径操作,也可以随意使用了。
File file = new File("d:/mldn.txt");
//完整代码
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "mldn.txt");
if (file.exists()) {
file.delete();// 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
JavaAPIDemo
2、在进行文件创建的时候有一个重要的前提:文件的父路径必须首先存在。
·如何获取父路径:public File getParentFile();
·创建多级目录:public boolean mkdirs();
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "hello" + File.separator + "demo" + File.separator + "message"
+ File.separator + "pluto.txt");
if (!file.getParentFile().exists()) { // 父路径不存在
file.getParentFile().mkdirs() ; // 创建父路径
}
if (file.exists()) {
file.delete();// 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
JavaAPIDemo
注:这种判断并且建立父目录的操作在很多的情况下可能只需要一次,但是如果将这个判断一直都停留在代码里面,那么就会造成时间复杂度的提升,所以这个时候如果要想提升性能,请先保证目录以及创建。
3. 获取文件信息
除了可以进行文件的操作之外也可以通过File类来获取一些文件本身提供的信息,可以获取如下内容:
·文件是否可读:public boolean canRead();
·文件是否可写:public boolean canWrite();
·获取文件长度:public long length(),该方法返回的是long数据类型、字节长度;
·最后一次修改日期时间:public long lastModified();
·判断是否为目录:public boolean isDirectory();
·判断是否为文件:public boolean isFile();
//my.jpg可以修改为该盘的任一个文件,须带上后缀名
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
class MathUtil {//将字节Bytes数目转换为MB
private MathUtil() {
} public static double round(double num, int scale) {
return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
}
}
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "my.jpg");
System.out.println("文件是否可读:" + file.canRead());
System.out.println("文件是否可写:" + file.canWrite());
System.out.println("文件大小:" + MathUtil.round(file.length() / (double) 1024 / 1024, 2));
System.out.println(
"最后的修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
System.out.println("是目录吗?" + file.isDirectory());
System.out.println("是文件吗?" + file.isFile());
}
}
JavaAPIDemo
既然可以判断给定的路径是文件还是目录,那么就可以进一步的判断,如果发现是目录,则应该列出目录中的全部内容:
·列出目录内容:public File[] listFiles();
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator);
if (file.isDirectory()) { // 当前是一个目录
File result [] = file.listFiles() ; // 列出目录中的全部内容
for (int x = 0 ; x < result.length ; x ++) {
System.out.println(result[x]);
}
}
}
}
JavaAPIDemo
这些信息的获得都是文件或目录本身的操作,都是不涉及到文件内容处理的。
4. File操作案例:列出指定目录中的全部文件
由开发者任意设置一个目录的路径,而后将这个目录中所有的文件的信息全部列出,包括子目录中的所有文件,在这样的处理情况下最好的做法就是利用递归的形式来完成。
范例:列出指定目录的全部文件
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator) ; // 是一个目录
long start = System.currentTimeMillis();
listDir(file) ;
long end = System.currentTimeMillis();
System.out.println("时间是:"+(end-start));
}
public static void listDir(File file) {
if (file.isDirectory()) { // 是一个目录
File results [] = file.listFiles() ; // 列出目录中的全部内容
if (results != null) {
for (int x = 0 ; x < results.length ; x ++) {
listDir(results[x]) ; // 继续依次判断
}
}
}
System.out.println(file); // 获得完整路径
}
}
JavaAPIDemo
如果现在将路径输出变为删除操作,那么就彻底删除路径。
//慎重,小心使用 mldnjava问目录,若该目录不存在,也可以使用改盘的其他文件夹
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "mldnjava") ; // 是一个目录
listDir(file) ;
}
public static void listDir(File file) {
if (file.isDirectory()) { // 是一个目录
File results [] = file.listFiles() ; // 列出目录中的全部内容
if (results != null) {
for (int x = 0 ; x < results.length ; x ++) {
listDir(results[x]) ; // 继续依次判断
}
}
}
file.delete() ;
}
}
JavaAPIDemo
5. File操作案例:批量修改文件名称
编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为.txt。
·对于这些的操作必须设置一些假设的约定,能够重命名的文件都是有后缀的,如果没有后缀的路径,则为其追加路径,如果有后缀的路径,则必须以最后一个“.”进行截取。
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "test") ; // 是一个目录
long start = System.currentTimeMillis() ;
renameDir(file) ;
long end = System.currentTimeMillis() ;
System.out.println("本次操作所花费的时间:" + (end - start));
}
public static void renameDir(File file) {
if (file.isDirectory()) { // 是一个目录
File results [] = file.listFiles() ; // 列出子目录中的内容
if (results != null) {
for (int x = 0 ; x < results.length ; x ++) {
renameDir(results[x]) ;
}
}
} else {
if (file.isFile()) { // 如果是文件则必须进行重命名
String fileName = null ;
if (file.getName().contains(".")) {
fileName = file.getName().substring(0,file.getName().lastIndexOf(".")) + ".txt" ;
} else {
fileName = file.getName() + ".txt" ;
}
File newFile = new File(file.getParentFile(),fileName) ; // 新的文件名称
file.renameTo(newFile) ; // 重命名
}
}
}
}
JavaAPIDemo
Java IO编程——File文件操作类的更多相关文章
-
java学习笔记之IO编程—File文件操作类
1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...
-
高效IO之File文件操作类的基础用法(二)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 前言 众所周知Java提供File类,让我们对文件进行操作,下面就来简单整理了一 ...
-
File 文件操作类 大全
File 文件操作类 大全 许多人都会对文件操作感到很难 我也是 但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴 等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦 ...
-
java学习(九) —— java中的File文件操作及IO流概述
前言 流是干什么的:为了永久性的保存数据. IO流用来处理设备之间的数据传输(上传和下载文件) java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. java IO系统的学习, ...
-
java IO流 Zip文件操作
一.简介 压缩流操作主要的三个类 ZipOutputStream.ZipFile.ZipInputStream ,经常可以看到各种压缩文件:zip.jar.GZ格式的压缩文件 二.ZipEntry ...
-
java IO流 对文件操作的代码集合
Io流 按照分类 有两种分类 流向方向: 有输入流和输出流 按照操作类型有:字节流和字符流 按照流向方向 字节流的一些操作 //读文件 FileInputStream fis = new FileIn ...
-
java io流 对文件操作
检查文件是否存在 获取文件路径 获取文件大小 ...... 更多参考手册 //对文件的操作 //检查文件是否存在 //获取文件路径 //获取文件大小 //文件是否可读 //文件是否可写 //.... ...
-
JavaI/O编程---File文件操作
File类的基本使用 构造方法: public File (String pathname) public File(FIle parent,String child) 创建文件: public bo ...
-
Java IO基础--File常用操作(递归)
File中经常会使用递归方法打印属性结构.统计文件夹下文件个数.子文件夹个数以及文件大小,可以作为递归的应用练习. 递归的写法,百度一搜一大堆,这里我使用对javabean方式封装了一下: packa ...
随机推荐
-
windows 7/10下安装oracle 10g
有段时间没搞oracle了,最近要给别人在win 7下装个oracle 10g,特记录备忘下. 使用http://download.oracle.com/otn/nt/oracle10g/10201/ ...
-
docker-compose常用命令
--verbose:输出详细信息-f 制定一个非docker-compose.yml命名的yaml文件-p 设置一个项目名称(默认是directory名)docker-compose的动作包括:bui ...
-
LINUX nohup命令输入输出深浅进出
无论是否将 nohup命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中.如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中 ...
-
企业架构研究总结(45)——企业架构与建模之使用ArchiMate进行分析(全系列完)
4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局的做法往往还会造成不必要的浪费.由此可见,一个能够跨越各个领 ...
-
excel==>;csv==via phpmyadmin (edit php.ini &; my.ini)==>; MySQL Database
正如同标题, 标题的顺序是 先从Excel表单,保存为csv文档. 步骤: 1.这个可以用linux下的libra office打开 abc.xls 2.用libra office 将 abc.xls ...
-
Python接口测试之对MySQL/unittest框架/Requests 的操作
单元测试支持测试自动化. 共享的安装程序和关闭代码测试. 聚合成集合,测试和报告框架从测试的独立性.单元测试模块提供可以很容易地支持这些素质的一组测试的类.关于unittest 测试框架建议可以到官方 ...
-
ms17_010_psexec
一.ms17_010_psexec简介 MS17-010 的psexec是针对Microsoft Windows的两款最受欢迎的漏洞进行攻击. CVE-2017-0146(EternalChampio ...
-
linux怎么查看进程启动,用户的工作目录,pwdx,/proc/11256/cwd
linux 通过pid 寻找程序路径的最简单命令(pwdx) #pwdx pid号1 [pid2] .... 在linux实际操作命令中,查看pid的方式有很多种,通过pid找程序路径的方式也有 ...
-
CoreJava(一)—— Java迭代语句
本文介绍一些关于迭代语句的一些相关技巧以及Java8中的迭代语句的使用方法. public class TestBreak { public static void main(String[] arg ...
-
zookeeper各种报错、原因及解决方法汇总(持续更新)
[root@iZ23nn1p4mjZ zookeeper-3.4.10]# bin/zkCli.sh -server localhost:2181,localhost:2182,localhost:2 ...