javaIO流(一)--File类的基本使用
一.File文件操作类
在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创建,删除,重命名)有关的类,而如果想要进行File类的操作,我们需要提供有完整的路径支持,而后可以调用相应的方法进行处理
--打开JDK的文档,可以发现File类是Comparable接口的子类,所以File类对象是可以进行排序处理的(Windows系统可以将文件根据创建日期,文件名,大小来进行排序).而进行File类处理的时候,我们需要为其设置访问路径,那么对于路径的配置,主要通过构造方法来进行处理:
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri)
通过将给定的 file: URI转换为抽象路径名来创建新的 File实例
--范例:使用File类常见一个文件:
public class MyFileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\demo1.txt");
//如果现在想要进行文件的基本操作,可以使用如下的基本方法:
/* 1.public boolean createNewFile()throws IOException 创建新文件
(true,文件不存在,成功创建,false,文件已经存在,创建失败)*/
/*2.判断文件是存在: public boolean exists()*/
/*3.public boolean delete()删除当前文件*/
if (file.exists()) {
System.out.println("当前文件已经存在,首先删除当前文件");
System.out.println(file.delete() ? "删除文件成功" : "删除文件失败");
}
System.out.println(file.createNewFile() ? "创建文件成功" : "创建文件失败");
}
}
--可以发现File类实现的就是文件本身的的处理,文件内容的处理并不属于File类的范畴
二.File类的深入操作
现在已经实现文件的基础操作,但是对于这个操作是存在一些问题的,对代码进行优化处理:
--在实际的软件项目开发和运行过程中,往往都会在Windows系统中进行项目的开发,而在项目部署的时候通常会在Linux系统中进行发布部署,以保证项目发布的安全性;
在不用的操作系统之中,会存在不同的路径分隔符:Windows分隔符"\",Linux分隔符"/",所以正最初进行开发的时候,就必须考虑不同系统环境下的分隔符的问题,因此为了解决这一问题,Flie类提供有一个常量:public static final String separator;(这是历史版本遗留的分隔符静态常量,变量名为小写)
--范例:正常的路径编写:
public class MyFileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:" + File.separator + "demo1java.txt");
//如果现在想要进行文件的基本操作,可以使用如下的基本方法:
/* 1.public boolean createNewFile()throws IOException 创建新文件
(true,文件不存在,成功创建,false,文件已经存在,创建失败)*/
/*2.判断文件是存在: public boolean exists()*/
/*3.public boolean delete()删除当前文件*/
if (file.exists()) {
System.out.println("当前文件已经存在,首先删除当前文件");
System.out.println(file.delete() ? "删除文件成功" : "删除文件失败");
}
System.out.println(file.createNewFile() ? "创建文件成功" : "创建文件失败");
}
}
--但是随着系统的适应性的不断加强,对于当前的路径操作,也可以使用随意使用了,无关"/","\",但是对于标准来讲,更建议使用这个常量
--在使用Flies类进行文件处理的时候,需要注意的是,程序的主要操作流程:程序-->JVM-->操作系统函数-->文件处理,所以进行同一文件的删除和创建操作时,会出现短暂的延迟,因此在非比较情况下不建议进行重名的文件处理
--在进行文件创建的时候,有一个重要的前提:文件的父路径必须首先存在:
public class MyFileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:" + File.separator + "java_test"
+ File.separator + "java_demo" + File.separator + "demo1java.txt");
//如果现在想要进行文件的基本操作,可以使用如下的基本方法:
/* 1.public boolean createNewFile()throws IOException 创建新文件
(true,文件不存在,成功创建,false,文件已经存在,创建失败)*/
/*2.判断文件是存在: public boolean exists()*/
/*3.public boolean delete()删除当前文件*/
/*4.获取父路径getParentFile public File getParentFile() */
/*5.创建目录:
* public boolean mkdir()创建单个目录
* public boolean mkdirs()创建多个目录*/
if(!file.getParentFile().exists()){ //父路径不存在
System.out.println(file.getParentFile().mkdirs()?"创建父路径成功":"创建父路径失败"); //创建父路径
}
System.out.println(file.createNewFile()?"创建文件成功":"创建文件失败");
}
}
--这种判断并建立父路径的操作,在很多情况下可能只要一次,但是如果将这个判断一直都停留在代码中,将会导致时间复杂度的提升,如果要想提升性能,请先保证目录已经创建,从而逐步提升性能
三.文件信息获取
除了可以进行文件的操作之外,也可以通过File类获取文件本身提供的信息:
class MathUtil {
private MathUtil() {
} /**
* 实现四舍五入操作
*
* @param num 当前的数字信息
* @param scale 要保留的小数位数
* @return 四舍五入的结果
*/
public static double round(double num, int scale) {
return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
}
} public class MyFileTest {
public static void main(String[] args) {
//文件是否可读:boolean canRead()
//文件是否可写:boolean canWrite()
File file = new File("d:" + File.separator + "java_test" + File.separator + "my.png");
System.out.println("文件是否可读: " + file.canRead());
System.out.println("文件是否可写: " + file.canWrite());
//获取文件的长度long length() 即获取文件大小
System.out.println("文件大小: " + MathUtil.round(file.length() / (double) 1024 / 1024, 2) + "Mb");
//获取文件的最后一次修改的日期时间 long lastModified()
System.out.println("最后的修改时间: " +
new SimpleDateFormat("yyyy-MM-dd HH:mm:sss").format(new Date(file.lastModified())));
//查看该文件是否为目录boolean isDirectory()
//查看该文件是否为文件boolean isFile()
System.out.println("查看是否为目录: " + file.isDirectory());
System.out.println("查看是否为文件: " + file.isFile()); //我们发现既然可以判断还是否为目录,那么是否可以在判断是目录之后返回该目录下的所有子目录以及目录文件呢
System.out.println("========列出目录内容========");
//列出目录内容 public File[] listFiles();
File directory = new File("F:" + File.separator + "idea_workspace");
if(directory.isDirectory()){ //判断当前这是一个目录
File[] files = directory.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
}
--这些新的获得都是文件或目录本身的操作,都不设计到文件内容的处理
--范例:列出指定目录的全部文件:
public class ListAllFileDemo {
public static void main(String[] args) {
//设置任意一个目录的路径,而后将这个目录中所有文件的信息都进行打印输出处理
//可以采用递归的方法来实现
Scanner scanner = new Scanner(System.in);
String dir = scanner.next();
File file = new File(dir);
if (!file.isDirectory()) {
System.out.println("当前输入的路径并不是一个文件夹路径");
} else {
listDir(file, 1);
}
} /**
* 列出当前输入文件目录的所有文件列表
*
* @param file 当前的文件夹路径
* @param index 请输入1
*/
public static void listDir(File file, int index) {
File thisFile = file; //当前的文件路径
StringBuilder tab = new StringBuilder(); //间隔处理符
File[] files = thisFile.listFiles();
for (int i = 0; i < index - 1; i++) {
tab.append(" ");
}
for (File f : files) {
System.out.println(tab.toString() + f);
if (f.isDirectory()) {
listDir(f, index++);
}
}
}
}
--范例:批量修改文件名称
public class MyModifyFileNameDemo {
public static void main(String[] args) {
/*程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为txt*/
//文件的路径必须以最后一个.为止
//如果存在后缀,则为修改,否则为追加
Scanner scanner = new Scanner(System.in);
System.out.println("请输入目录名称:");
renameDir(new File(scanner.next()));
} public static void renameDir(File file) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
renameDir(f);
}
} else {
File parentFile = file.getParentFile();
String name = file.getName();
if (name.contains(".")) {
name = name.substring(0, name.lastIndexOf(".")) + ".txt";
} else {
name = name + ".txt";
}
System.out.println(name);
}
}
}
javaIO流(一)--File类的基本使用的更多相关文章
- IO流,File类的测试........课堂加总结
package liu0926; import java.io.File; import java.io.IOException; public class Text01 { public stati ...
- IO流(File类,IO流的分类,字节流和字符流,转换流,缓冲流,对象序列化)
1.File类 File类可以在程序中 操作文件和目录.File类是通过建立File类对象,在调用File类的对象来进行相关操作的. 示例: public class Demo01 { public ...
- java基础之-I/O流和File类解析
在日常的java开发中少不了文件的读取和 写入,这就涉及到文件的I/O操作,今天就来总结下文件的IO操作,顺便文件的IO操作也需要File了的帮助,所以一起总结了. 以下图片为我根据其他博客所总结的内 ...
- Java-IO流之File操作和Properties操作
java的File类主要是用来操作文件的元数据,稍作演示如下: 其中方法getAllJavaFile()是使用了过滤器FileFileter,这个过滤器只需要实现accept方法,判断什么样的文件返回 ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- JAVASE(十六) IO流 :File类、节点流、缓冲流、转换流、编码集、对象流
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.File类型 1.1.File类的理解 File类是在java.io包下 File可以理解成一个文件 ...
- IO流(File类
File类 三个构造方法 File(String filename)//模式和应用程序一个目录下 File(String directoryPath,String filename)//文件的绝对路径 ...
- 【Java IO流】File类的使用
File类的使用 Java中的File类是在java.io.File中,Java.IO.File类表示文件或目录. File类只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. 一 ...
- java基础——IO流之File类
1.File类的构造方法: File(String pathName):通过一个指定的字符串类型路径来创建一个文件对象 File (String parent,String child):通过指定 ...
随机推荐
- 【学习总结】Eclipse常用快捷键
相关博文 [JAVA]eclipse-Introduction
- vue-cli3脚手架的安装
如果之前有安装过其他的版本的话,要先卸载 卸载:npm uninstall vue-cli-g 或 yarn global remove vue-cli 安装:npm i @vue/cli -g ...
- go语言从例子开始之Example34.速率限制
速率限制(英) 是一个重要的控制服务资源利用和质量的途径.Go 通过 Go 协程.通道和打点器优美的支持了速率限制. Example: package main import "fmt&qu ...
- ORA-01555 快照过旧
用户user1对表进行了更新操作,用户user2在user1还没有进行提交前读表中数据,而且是大批量的读取(打个比方:耗时3分钟)而在这3分钟内user1进行了提交操作,那又会产生什么影响呢?这个时候 ...
- Go的学习 sort
1.排序操作主要都在 sort包中,导入就可以使用了 2.sort.Ints对整数进行排序 package main; import ( "fmt" "sort" ...
- Codeforces 958F2 Lightsabers (medium) 尺取法
题目大意: 输入n,m,分别表示人的个数和颜色的个数,下一行输入n个数,对应每个人的颜色,最后一行输入对应每个颜色的人应有的数量: 问是否能找出一个区间,满足条件但有多余的人,输出多余的人最少的个数, ...
- JavaScript-黑科技
单行写一个评级 var rate = 3; "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate); 随机字符串 Math.random().toStrin ...
- Java线程与线程、进程与进程之间通信方式
1.1 基本概念以及线程与进程之间的区别联系 关于进程和线程,首先从定义上理解就有所不同: 进程是具有一定独立功能的程序.它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说 ...
- php stripcslashes()函数 语法
php stripcslashes()函数 语法 作用:删除由 addcslashes() 函数添加的反斜杠.深圳直线电机 语法:stripcslashes(string) 参数: 参数 描述 str ...
- speike
speike 题目描述 众所周知,Speike 狗是一条特别喜欢追着Tom 打的狗. 现在,Tom 又把Speike 惹生气了,现在Speike 需要跨越千山万水找Tom 报仇. Speike 所在的 ...