Java内容梳理(17)API学习(5)文件

1、File类的构造方法

(1)File类的作用

用File类的对象来表示一个文件或目录

(2)File(String path)

通过指定文件或目录的路经来创建一个File对象

path:可以是相对路径,也可以是绝对路径

如:File noteFile = new File("note.txt");

System.out.println( file.exists() );

解释:

在java中的相对路径:参照物是启动JVM时所在的路径

通过Eclipse来运行Java程序时,相对路径的参照物为:工程目录

 

会把当前工程目录作为参照物,即note.txt在当前工程目录下就会输出true

(3)File(URI uri)

uri:统一资源定位标识

获得URI:任意类名.class.getResource("/抽象路径").toURI()

到classpath环境变量下搜索指定的子路径,得到URL对象通过toURI方法转换成URI对象

注意:

需要以"/"开头,"/"表示classpath路径

作用:

可定制搜索查找的路径,即添加classpath路径,而不用修改程序

例如:

File uri_File =new File( PathDemo.class.getResource("/res/uri-demo.txt").toURI() );

System.out.println( uri_File.exists() );

解释:第一个/代表的是classpath路径

在eclipse中的classpath路径是工程文件下的src或者bin目录,res代表包名,所以能去找文件

2、File类的常用方法

(1)File类操作文件

createNewFile:当文件对象所表示的文件不存在时,才能成功创建一个新的文件,否则没有任何效果

delete:立即删除

deleteOnExit:在程序正常退出时删除

exists 是否存在

isFile 判断是否是文件 如果文件对象在磁盘上本来就不存在时,返回false

length 获取文件大小

getName 获取文件

getAbsolutePath 获取绝对路径

(2)File类操作目录

mkdir:只能创建一层目录, 若存在多层则创建失败

mkdirs:单个或多层目录都可以创建

delete:删除空目录

判断目录是否存在:exists

判断是否是目录:isDirectory 当目录不存在时,返回false

获取目录内容列表:

list()

String[] f = file.list();//返回目录下所有的文件名和目录名

listFiles()

File[] f = file.listFiles();//返回目录下所有的文件和目录

listFiles( FileFilter filter )

File[]  f = file.listFiles( new FileFilter(){ //文件过滤器,筛选出符合自己要求的文件和目录
        public boolean accept(File f){
                String fileName = f.getName();
                if(fileName.toLowerCase().startsWith("a")){
                         return true;
                }
                 return false;
       }
} );

(3)举例:如何删除一个非空目录下的所有目录和文件

package file;

import java.io.File;

public class FileOprater {
	
	/**
	 * 如何删除一个非空目录下的所有目录和文件
	 */
	public static void removeFile(File file) {
		/**
		 * file为空或者file不是目录,都不符合题意
		 */
		if(file == null || !(file.isDirectory())) {
			throw new RuntimeException(file+"不是一个有效的目录");
		}
		
		File[] files =  file.listFiles();
		for(File f : files) {
			if(f.isFile()) {//f是文件就直接删除
				f.delete();
			}else {
				removeFile(f);
			}
		}
		file.delete();//删除递归回来的空目录
	}
	
	public static void main(String[] args) {
		File file = new File("src/a");
		removeFile(file);
	}
}

3、RandomAccessFile类:提供了随机读写文件内容的功能(读取文件中任意位置的内容)

(1)构造方法

RandomAccessFile(File file, String mode)

RandomAccessFile(String name, String mode)

name:要访问的文件路径

mode:开始什么模式 "r" / "w" / "rw"

(2)文件指针

当前新建该对象后, 该对象的文件指针默认在第一个字节处;

文件指针的作用: 用来标记下一次读写发生的位置

seek:移动文件指针到文件头,并往后跳指定个数的字节数

skipBytes:从当前文件指针出往后跳指定个数的字节

readXxx

writeXxx

(3)举例:对视频加密

package file;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class CodeMP4 {
	public static void main(String[] args){
	
		try {
			//加密视频文件
			File file = new File("C:\\Users\\sun changxin\\Desktop\\abc.mp4");
			RandomAccessFile raf = new RandomAccessFile(file, "rw");
			
			//获得文件的字节数
			long len = raf.length();
			//设置变量记录文件指针的位置
			long filePointerPOS = 0;
			//一次读8k字节
			byte[] datas = new byte[8*1024];
			do {
				
				//先判断文件是否大于8k,若大于则读8k数据到datas中,若不足8k则改变datas数组
				if( len - filePointerPOS < datas.length ) {
					datas = new byte[ (int)(len - filePointerPOS) ];
				}
				//从文件读取数据,读满datas数组,放到数组datas中
				raf.readFully(datas);
				filePointerPOS =  raf.getFilePointer();
				
				//修改datas数组中的每一个数
				for( int i=0;i<datas.length;i++ ) {
					 datas[i] -= 1;//加密
				}
				
				//将修改后的datas数组覆盖文件中的那段数据
				raf.seek(filePointerPOS - datas.length);
				raf.write(datas);
				
			}while( raf.getFilePointer() < len );
			
			raf.close();
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值