您的位置:首页 > 编程语言 > Java开发

Java 文件操作 File 及 RandomAccessFile

2017-10-11 14:16 507 查看
一、 File类概述

一个代表文件或目录的类
目录 : 只是将一个字符串标记为一个目录  , 路径所占的内存空间大小为0。
二、 重要方法

创建
createNewFile() : 文件不存在时,创建一个文件 , 要求存放这个文件的目录真实存在   ,不能创建目录。
mkdri() : 创建目录 
mkdris() : 创建多级目录 

删除
deleted() : 删除目录文件

判断
isDrictory() : 判断是否是一个目录
isFile () : 判断是否是一个文件
canWrite() : 判断文件是否可写
canReade() : 判断文件是否可读
exists() ; 判断文件是否真实存在
canExecute() : 判断文件是否可执行
isHidden () : 判断文件是否隐藏

获取
getName() :  获取文件的名字 。  底层实现: 获取路径中“/"最后一次出现的位置,从这个位置的下一位截取后返回文件名。
listFiles() : 获取目录中所有目录和文件组成的集合
getAbsoluteFile() : 获取这个文件的绝对路径
getParent() : 获取父路径  , 底层实现: 获取路径中“/"最后一次出现的位置,从0到这个位置开始截取。
getPath() : 获取路径参数 。   参数传进去是什么样子,获取到就是什么样子
lastModifie() : 获取最后一次修改时间
list() : 获取当前目录下所以文件和目录组成的数组

设置
setWriteable() : 设置文件权限为可写 。
renameTo() : 重命名

练习:
/*
*文件练习
* 用递归的方式删除一个目录及目录下所有的文件
* */
public class FileTest_01 {
public static void main(String[] args) {
//C:\\Users\\user\\Desktop\\杂七杂八-定时清理 - 副本
File f = new File("C:\\Users\\user\\Desktop\\杂七杂八-定时清理 - 副本");
delFile(f);
System.out.println("执行完成");
}
public  static void delFile(File f){
//判断参数是否为空
if(f == null){
throw new NullPointerException("该路径为错误路径");
}
//判断是否是一个目录
if(f.isDirectory()){
File[] listFiles = f.listFiles();
for(File ff : listFiles){
delFile(ff);
}
}
//删除当前目录
f.delete();
}
}


练习:
/*
* 记录某一种格式文件的个数
*
* */
public class FileTest_02 {
private static int count  = 0;
public static void main(String[] args) {
//		C:\\Users\\user\\Desktop\\杂七杂八-定时清理 - 副本
File f = new File("C:\\Users\\user\\Desktop\\笔记 - 副本");
getCount(f);
System.out.println("该目录下txt文件的个数为: "+count);
}

private static void getCount(File f) {
//判断路径是否为空
if(f == null){
throw new NullPointerException("该路径为错误路径");
}
//判断是否是一个 目录
if(f.isDirectory()){
File[] listFiles = f.listFiles();
for(File ff : listFiles){
getCount(ff);
}
}else{
//如果是文件  ,判断文件格式  ,并计数
String name  = f.getName();

if(name.endsWith(".txt")){
count++;
}
}

}
}


练习:
/*
* 提取一个目录下所有的某一格式的文件
* */
public class FileTest_03 {
private static File toFile = new File("C:\\Users\\user\\Desktop\\哈哈");
//	private static File toFile1 = new File("C:\\Users\\user\\Desktop\\哈哈2");
public static void main(String[] args) {
File f = new File("C:\\Users\\user\\Desktop\\笔记 - 副本 (3)");
extr(f);
System.out.println("执行完毕!");
}

private static void extr(File f) {
//判断文件是否为空
if(f == null){
throw new NullPointerException("该路径为错误路径");
}
//判断是否是一个目录
if(f.isDirectory()){
File[] listFiles = f.listFiles();
for(File ff : listFiles){
extr(ff);
}
}else{
//如果不是目录 则判断文件类型并挪动
if(f.getName().endsWith(".txt")){
//获取文件真正的名字
String name = f.getName();
int index = name.lastIndexOf(".");
String realName = name.substring(0, index);
//过滤目标目录  判断是否有重名文件
FilenameFilter filter = new FilenameFilter() {

@Override
public boolean accept(File dir, String name) {
return name.matches(realName+"\\d*\\.txt");
}
};
File[] list = toFile.listFiles(filter);
System.out.println(list.length);
//开始挪动
f.renameTo(new File(toFile , realName+(list.length>0?list.length:"")+".txt"));
}
}
}
}

三、RandomAccessFile

一个可以对文件进行读写的类  ----    需要给指定的对象指定对应的权限
操作文件时实际上是把这个文件看做一个大型的字节数组 , 默认从第0为开始操作。
示例:
public class RandomAccessFileDemo1 {

public static void main(String[] args) throws Exception {

// r --- 读取
// w --- 写入
// d --- 同步更新
// 如果文件不存在,则创建该文件
// 如果文件已存在,直接操作该文件
RandomAccessFile raf = new RandomAccessFile("E:\\a.txt", "rw");

// 跳过指定的字节个数
raf.seek(7);

// 写出数据
raf.write("abc".getBytes());

// 将指针归零
raf.seek(0);

// 表示读取一个字节---如果读取到文件的末尾会返回一个-1
// int i = raf.read();
// System.out.println(i);

// int i = -1;
//
// while ((i = raf.read()) != -1) {
// System.out.println(i);
// }

// 构建了缓冲区
byte[] bs = new byte[8];

int len = -1;

// read(byte[] bs)---返回值表示读取到的字节个数
while ((len = raf.read(bs)) != -1) {
System.out.println(new String(bs, 0, len));
}

// 当一个RandomAccessFile对象在操作这个文件的时候,不允许别的对象操作
raf.close();
}

}


练习:
/*
* 复制文件
* */
public class RandomAccessFileTest_01 {
public static void main(String[] args) throws IOException {
//源文件
File of = new File("C:\\Users\\user\\Desktop\\哈哈\\1、Django之url函数.txt");
//目标文件
File nf = new File("C:\\Users\\user\\Desktop\\暂存\\1.txt");
//创建RandomAccessFile对象并指向源文件
RandomAccessFile rafo = new RandomAccessFile(of, "rw");
//创建RandomAccessFile对象并指向新文件
RandomAccessFile rafn = new RandomAccessFile(nf, "rw");

//构建缓冲区
byte[] bs = new byte[1024*1024*15];
int len = -1;
//读取文件
while((  len = rafo.read(bs)) != -1){
//将读取到的字节流写入到目标文件中
rafn.write(bs, 0, len);
}
//关闭流资源
rafn.close();
rafo.close();
System.out.println("复制完毕");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: