记忆系列-Java IO的File类 – 记忆角落

记忆系列-Java IO的File类

/ 1评 / 0

又是失业学习的一天~噗呲最近面试对io流有点不记得,于是翻开了久违JAVA四大名著之java从入门到放弃重新复习,顺便弄一个IO系列以后自己直接看笔记算了~


File类

File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。值得指出的是,不管是文件还是目录都是使用File来操作的,File能新建、删除、重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

File类共提供了三个不同的构造函数:

1.File (String pathname)   
例:File f1 = new File("test1.txt"); //创建文件对象f1,f1所指的文件是在当前目录下创建的test1.txt
2.File (String parent,String child)
例:File f2 = new  File("D:\\testDir2","test2.txt") ;//注意:D:\\testDir2目录事先必须存在,否则异常
3.File(File parent, String child)
例:
String fileName = "D:"+File.separator+"testDir3"+File.separator;
File f3 = new File(fileName);
if(!f3.exists()&&f3.isDirectory()){
	f3.mkdir();
}
File f4 = new File(f3, "test3.txt");
if(!f4.exists()&&!f4.isFile()){// 如果文件不存在,创建文件
	try {
		f4.createNewFile();
	} catch (IOException e) {
		// TODO Auto-generated catch block
	}
}
System.out.println(f4.toString());//D:\testDir3\test3.txt

文件分隔符

注意:我们知道,各个平台之间的路径分隔符是不一样的。所以为了屏蔽各个平台之间的分隔符差异就使用JDK 为我们提供的字段。

ps:Windows在路径名中使用反斜杠(\)作为名称分隔符,而UNIX使用正斜杠(/)。

--windows输出
System.out.println(File.separator);//输出 \  --是用来分隔同一个路径字符串中的目录的
System.out.println(File.pathSeparator);//输出 ; --是分隔连续多个路径字符串的分隔符

创建File对象成功后,可以使用以下列表中的方法操作文件。

(表格从菜鸟教程复制:https://www.runoob.com/java/java-file.html)

看到懵逼了?方法是不是有点多?其实我自己工作一年多来常用就这几个:

1.创建方法:

1.boolean createNewFile() 不存在返回true 存在返回false
2.boolean mkdir() 创建目录,如果上一级目录不存在,则会创建失败
3.boolean mkdirs() 创建多级目录,如果上一级目录不存在也会自动创建

2.删除方法:

1.boolean delete() 删除文件或目录,如果是删除目录,则目录下必须为空才能删除,不然报异常
2.boolean deleteOnExit() 文件使用完成后删除

3.判定方法:

1.boolean canExecute()判断文件是否可执行
2.boolean canRead()判断文件是否可读
3.boolean canWrite() 判断文件是否可写
4.boolean exists() 判断文件或目录是否存在
5.boolean isDirectory() 判断此路径是否为一个目录
6.boolean isFile()  判断是否为一个文件
7.boolean isHidden()  判断是否为隐藏文件
8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断

4.获取方法:

1.String getName() 获取此路径表示的文件或目录名称
2.String getPath() 将此路径名转换为路径名字符串
3.String getAbsolutePath() 返回此抽象路径名的绝对形式
4.String getParent()//如果没有父目录返回null
5.long lastModified()//获取最后一次修改的时间-->毫秒值,如果需要看年月日时分秒的话,需要创建日历类?然后通过日历类的set方法把值传进去,就可以获取具体yyyymmdd之类的啦
6.long length() 返回由此抽象路径名表示的文件的长度。
7.boolean renameTo(File f) 重命名由此抽象路径名表示的文件。
8.File[] liseRoots()//获取机器盘符
9.String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
10.String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录

最最最后就是一个小例子吧~喷下以后回来看的垃圾郭良俊,好好看哈~

package com.htjf.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * File文件工具类
 * @author Jiomer
 *
 */
public class FileUtil {
	
	/**
	 * 获取本地文件夹下所有的文件
	 * isAddDirectory 是否加载子目录下的文件
	 * @param filepath 文件夹路径
	 * @return
	 */
	public static List<String> getListNames(String filepath,boolean isAddDirectory){
		List<String> listName = new ArrayList<String>();  
		File baseFile= new File(filepath);  
		if (baseFile.isFile() || !baseFile.exists()) {
            return listName;
        }
		File[] files = baseFile.listFiles();
		for (File file : files) {
            if (file.isDirectory()) {
                if(isAddDirectory){
                	listName.add(file.getName());
                }
                listName.addAll(getListNames(file.getAbsolutePath(),isAddDirectory));
            } else {
            	listName.add(file.getName());
            }
        }
		return listName;
	}
	
	/**
	 * 文件处理前重命名(以扩展名替换的形式)
	 * @param srcFile 需要重命名的文件
	 * @param tar 重命名目标字符串
	 * @param rep 替换字符串
	 * @return 重命名后文件
	 */
	public static File rename(File srcFile, String tar, String rep) {
		String perMatchFileName =  srcFile.getPath().replace(tar, rep);
		File newNameFile = new File(perMatchFileName);
		srcFile.renameTo(newNameFile);
		return newNameFile;
	}
	public static String reFileName(String oldName, String tar, String rep) {
		String newNameFile =  oldName.replace(tar, rep);
		return newNameFile;
	}
	/**
	 * 删除文件
	 * @param file
	 * @return
	 */
	public static boolean delFile(File file){
//		File file=new File(filePath+File.separator+fileName);
		if(file.exists()&&file.isFile()){
			return file.delete();
		}else{
			return false;
		}
	}

}

一条回应:“记忆系列-Java IO的File类”

  1. repostone说道:

    非技术的路过。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注