在操作系统中,文件是数据的存储单位,每个文件都有着不同的属性。
我们如何在代码中获取文件的各种属性呢?
下面的学习将让我们掌握这个技能,我们可能会在程序中对文件进行处理的过程中需要用到文件的一些属性。
1.File类的使用
在java编程中,我们可以使用File类来进行文件属性获取
代码实例如下:
package FileCoding.Exa1;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 获取文件属性信息
*/
public class CoreCoding {
public static void main(String[] args) throws IOException {
File file=new File("Flag_Feedback.png");
System.out.println("获得文件名称:"+file.getName());
System.out.println("获得文件长度(大小):"+file.length()+"byte");
//获得文件相对路径
String filePath=file.getPath();
System.out.println("文件相对路径:"+filePath);
//获得文件绝对路径
System.out.println("文件绝对路径:"+file.getAbsolutePath());
//获得文件的URI路径
System.out.println("文件URI路径:"+file.toURI());
//获得文件最后修改日期
System.out.println("文件最后修改日期:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
//获得文件是否可读
System.out.println("文件是否可读:"+file.canRead());
//获得文件是否可写
System.out.println("文件是否可写:"+file.canWrite());
//获取文件是否可执行
System.out.println("文件是否可执行: "+file.canExecute());
//获取文件是否隐藏
System.out.println("文件是否被隐藏:"+file.isHidden());
}
}
上面的代码中,只要我们在new File()时给的是正确的文件路径,那么我们就可以通过new的FIle对象获取该文件的各种属性。
注意:File对象的创建有几种方式
2.在指定目录下查询指定类型的文件
下面的程序展示了如何在指定目录下查询指定后缀的文件。
package FileCoding.Exa1_2;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 扫描获取指定类型的文件集合(只能单层查询)
*/
public class CoreCoding {
public static void main(String[] args) {
Object[] result = listFiles(new File("Java动手做一做"),"png");
assert result != null;
for (Object file:result){
File file1=(File)file;
System.out.println(file1.getName());
}
}
/**
* 显示文件夹中的文件
* @param dir 文件夹路径
* @param extName 文件后缀(文件类型)
* @return
*/
private static Object[] listFiles(File dir,String extName) {
List<File> fileList=new ArrayList<>();
if (dir == null)
return null;
//检查传入的dir是否是路径,
// 如果不是则直接返回null
if(!dir.isDirectory()){
return null;
}
//获取目录下所有的文件的数组
File[] files = dir.listFiles();
//遍历文件数组
for (File file : files) {
if(accept(file,extName)){
fileList.add(file);
}
}
return fileList.toArray();
}
/**
*
* @param pathname
* @param extName
* @return
*/
public static boolean accept(File pathname,String extName) {
// 获取用户设置的指定扩展名
if (extName == null || extName.isEmpty())
return false;
//在后缀前面加一个.
if (!extName.startsWith("."))
extName = "." + extName;
//如果存在大写字母,则转换为小写的
extName = extName.toLowerCase();
// 判断扩展名与过滤文件名是否符合要求
return pathname.getName().toLowerCase().endsWith(extName);
}
}
3.文本内容替换功能
package FileCoding.Exa1_3;
import java.io.*;
/**
* 文件部分内容替换
*/
public class CoreCoding {
public static void main(String[] args) {
replaceText(new File("Java动手做一做/Text.txt"),"tama","nima");
}
/**
* 文本替换: 替换指定文件的指定文本
* @param file 文件对象
* @param searchText 替换前字符文本
* @param replaceText 替换后字符文本
* @return 是否成功
*/
public static boolean replaceText(File file, String searchText, String replaceText){
//如果替换前文本为空,直接返回false
if (searchText.isEmpty()) return false;
try {
//创建文件字符输入流
FileReader fis = new FileReader(file);
//创建缓冲字符数组
char[] data = new char[1024];
int rn = 0;
//创建字符串构建器
StringBuilder sb = new StringBuilder();
//读取文件内容到字符串构建器
while ((rn = fis.read(data)) > 0) {
String str = String.valueOf(data, 0, rn);
sb.append(str);
}
//从构建器中生成字符串,并替换搜索文本
String str = sb.toString().replace(searchText, replaceText);
//输出替换后的文本到文件
//创建文件输出流
FileWriter fOut = new FileWriter(file);
//把替换完成的字符串写入文件内
fOut.write(str.toCharArray());
fOut.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
}