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):通过指定 ...
随机推荐
- python学习第二十天文件操作方法
字符有的存储在内存,有的存储在硬盘,文件也有增删改查的操作方法,open()方法,read()方法,readline()方法,close()文件关闭,write()写的方法,seek() 指针移动方法 ...
- android 完全退出应用程序(经过严格验证)
今天解决了如何彻底结束Android应用程序的方法.网上有很多的参考方法,什么finish():android.os.Process.killProcess(android.os.Process.my ...
- cgi+lighttpd上传大文件失败解决办法
问题: - 前端页面点击上传按钮,不超过30M的小文件顺利上传到板子指定位置,上传60Md的更新包,出错,http状态码413——请求实体过大 环境: - web服务器——lighttpd1.4.30 ...
- bounds与frame的区别及setBounds的使用
转自http://www.cocoachina.com/ios/20140925/9755.html 在iOS开发中经常遇到两个词Frame和bounds,本文主要阐述Frame和bound的区别,尤 ...
- 2018-8-10-win10-uwp-线程池
title author date CreateTime categories win10 uwp 线程池 lindexi 2018-08-10 19:16:50 +0800 2018-05-15 1 ...
- 微信小程序(13)--页面滚动到某个位置添加类效果
微信小程序页面滚动到某个位置添加类,盒子置顶效果. <!-- vh,是指CSS中相对长度单位,表示相对视口高度(Viewport Height),1vh = % * 视口高度 --> &l ...
- Sass-@while
@while 指令也需要 SassScript 表达式(像其他指令一样),并且会生成不同的样式块,直到表达式值为 false 时停止循环.这个和 @for 指令很相似,只要 @while 后面的条件为 ...
- .net core 操作oracle
依赖项——右键——管理NuGet程序包——浏览——输入以下内容 oracle.ManagedDataAccess.core(记得勾选包括预发行版) 在页面中加入操作数据库的方法 public IAct ...
- bzoj4489 [Jsoi2015]地铁线路 最短路
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4489 题解 感觉又被骗了.看这道题的 AC 人数不多,以为是一道很好的题目.结果发现是一个非常 ...
- [BZOJ1023][SHOI2008]cactus仙人掌图 DP
题目链接 套路就是先考虑一般的树上做法.求直径的dp的做法大家应该都会吧. 那么设\(dp[i]\)表示\(i\)的子树中的点到\(i\)的最大距离. 在dp的过程中 \[ ans=\max\{dp[ ...