Day01:文件操作(File、RandomAccessFile)
文件操作
JAVA中的 File 类是文件和目录路径名的抽象形式。使用 File 类可以获取文件本身的一些信息,例如文件所在的目录、文件长度、文件读写权限等。
在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象。
File 类表示处理文件和文件系统的相关信息。也就是说,File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。
方法名称 | 说明 |
---|---|
boolean canRead() | 测试应用程序是否能从指定的文件中进行读取 |
boolean canWrite() | 测试应用程序是否能写当前文件 |
boolean delete() | 删除当前对象指定的文件 . |
boolean exists() | 测试当前 File 是否存在 |
String getAbsolutePath() | 返回由该对象表示的文件的绝对路径名 |
String getName() | 返回表示当前对象的文件名 |
String getParent() | 返回当前 File 对象路径名的父路径名,如果此名没有父路径则为 null |
boolean isAbsolute() | 测试当前 File 对象表示的文件是否为一个绝对路径名 |
boolean isDirectory() | 测试当前 File 对象表示的文件是否为一个路径 |
boolean isFile() | 测试当前 File 对象表示的文件是否为一个“普通”文件 |
long lastModified() | 返回当前 File 对象表示的文件最后修改的时间 |
long length() | 返回当前 File 对象表示的文件长度 |
String[] list() | 返回当前 File 对象指定的路径文件列表 |
String[] list(FilenameFilter) | 返回当前 File 对象指定的目录中满足指定过滤器的文件列表 |
boolean mkdir() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean mkdirs() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean renameTo(File) | 将当前 File 对象指定的文件更名为给定参数 File 指定的路径名 |
创建和删除文件
File 类除了对文件的创建和删除外,还可以创建和删除目录。创建目录需要调用 mkdir() 方法,删除目录需要调用 delete() 方法。无论是创建还是删除目录都可以调用 exists() 方法判断目录是否存在。
mkdir()方法
· File的mkdir方法用于创建此抽象路径名指定的目录。
- boolean mkdir()
- 返回值:当且仅当已创建目录时,返回true;否则返回false
语法:
File f=new File("文件路径");
System.out.println(f.mkdir());
mkdirs()方法
· File的mkdirs方法用于创建此抽象路径名指定的目录,包括所有必须但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必须的父目录。
- boolean mkdirs()
- 返回值:当且仅当已创建目录以及所有必需的父目录时,返回true;否则返回false
delete()方法
· File的delete方法用于删除此抽象路径名表示的文件或目录。
- boolean delete()
- 返回值:当且仅当成功删除文件或目录时,返回true;否则返回false
- 需要注意的是,若此File对象所表示的是一个目录时,在删除时需要保证此为空目录才可以成功删除(目录中不能含有任何子项)。
语法:
File f=new File("文件路径");
System.out.println(f.delete());
获取文件属性
文件长度
length()方法
语法:
File f=new File("文件路径");
System.out.println(f.length());
文件目录(判断是否是文件夹)
方式1:
File()方法
语法:
File f=new File("文件路径");
System.out.println(f.isFile());
方式2:
isDirectory()方法
语法:
File f=new File("文件路径");
System.out.println(f.isDirectory());
是否可读?
canRead()方法
语法:
File f=new File("文件路径");
System.out.println(f.canRead());
是否可写?
canWrite()方法
语法:
File f=new File("文件路径");
System.out.println(f.canWrite());
是否隐藏?
isHidden()方法
语法:
File f=new File("文件路径");
System.out.println(f.isHidden());
最后修改日期
lastModified()方法
语法:
File f=new File("文件路径");
System.out.println(new Date(f.lastModified()));
文件名称
getName()方法
语法:
File f=new File("文件路径");
System.out.println(f.getName());
文件路径
getPath()方法
语法:
File f=new File("文件路径");
System.out.println(f.getPath());
路径
绝对路径
getAbsolutePath()方法
语法:
File f=new File("文件路径");
System.out.println(f.getAbsolutePath());
相对路径,相对于工作目录,如果在eclipse中,就是项目目录
判断是否存在文件
exists()方法
语法:
File f=new File("文件路径");
System.out.println(f.exists());
是否是文件(非文件)
isFile()方法
语法:
File f=new File("文件路径");
System.out.println(f.isFile());
文件重命名
renameTo()方法
语法:
File f=new File("文件路径");
File f2=new File("文件重命名路径");
f.renameTo(f2);
还有其他常用方法
实例体现:
1 import java.io.File;
2 import java.io.IOException;
3 import java.util.Arrays;
4
5 public class TWO {
6 public static void main(String[] args) throws IOException {
7 File f1=new File("/home/soft01/文档/IO/xx");
8 //字符串返回所有文件
9 String[] f=f1.list();
10 System.out.println(Arrays.toString(f));
11 //以数组返回所有文件
12 File[] f2=f1.listFiles();
13 System.out.println(Arrays.toString(f2));
14 //以字符串返回获取文件
15 String a=f1.getParent();
16 System.out.println(a);
17 //以文件返回获取文件
18 File b=f1.getParentFile();
19 System.out.println(b);
20 //创建文件,如果父文件夹不存在,创建父文件
21 System.out.println(f1.getParentFile().exists());
22 f1.mkdir();
23 //创建文件,如果父文件夹不存在抛出异常
24 f1.mkdirs();
25 //创建空文件,
26 f1.createNewFile();
27 //创建父目录
28 f1.getParentFile().mkdirs();
29 //显示盘符
30 f1.listRoots();
31 //删除文件
32 f1.delete();
33 }
34 }
文件操作——RandomAccessFile
Java提供了一个可以对文件随机访问的操作,访问包括读和写操作。该类名为RandomAccessFile。该类的读写是基于指针的操作。
只读模式
RandomAccessFile在对文件进行随机访问操作时有两个模式,分别为只读模式(只读取文件数据),和读写模式(对文件数据进行读写)。
只读模式:
在创建RandomAccessFile时,其提供的构造方法要求我们传入访问模式:
RandomAccessFile(File file,String mode) RandomAccessFile(String filename,String mode)
其中构造方法的第一个参数是需要访问的文件,而第二个参数则是访问模式:
r”:字符串”r”表示对该文件的访问是只读的。
读写模式
创建一个基于文件访问的读写模式的RandomAccessFile我们只需要在第二个参数中传入”rw”即可。
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
那么这时在使用RandomAccessFile对该文件的访问就是又可读又可写的。
字节数据读写操作
write(int d)方法
RandomAccessFile提供了一个可以向文件中写出字节的方法:
void write(int d)
该方法会根据当前指针所在位置处写入一个字节,是将参数int的”低8位”写出。
read()方法
RandomAccessFile提供了一个可以从文件中读取字节的方法:
int read()
该方法会从RandomAccessFile当前指针位置读取一个byte(8位) 填充到int的低八位, 高24位为0, 返回值范围正数: 0~255, 如果返回-1表示读取到了文件末尾EOF(EOF:End Of File)! 每次读取后自动移动文件指针, 准备下次读取。
write(byte[] d)方法
RandomAccessFile提供了一个可以向文件中写出一组字节的方法:
void write(byte[] d)
该方法会根据当前指针所在位置处连续写出给定数组中的所有字节,与该方法相似的还有一个常用方法:
void write(byte[] d,int offset,int len)
该方法会根据当前指针所在位置处连续写出给定数组中的部分字节,这个部分是从数组的offset处开始,连续len个字节。
read(byte[] d)方法
RandomAccessFile提供了一个可以从文件中批量读取字节的方法:
int read(byte[] b)
该方法会从文件中尝试最多读取给定数组的总长度的字节量,并从给定的字节数组第一个位置开始,将读取到的字节顺序存放至数组中,返回值为实际读取到的字节量 。
close方法
RandomAccessFile在对文件访问的操作全部结束后,要调用close()方法来释放与其关联的所有系统资源。
void close()
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
…..//读写操作
raf.close();//访问完毕后要关闭以释放系统资源。
文件指针操作
getFilePointer方法
RandomAccessFile的读写操作都是基于指针的,也就是说总是在指针当前所指向的位置进行读写操作。
RandomAccessFile提供了一个可以获取当前指针位置的方法:
long getFilePointer()
RandomAccessFile在创建时默认指向文件开始(第一个字节),通过getFilePointer方法获取指针位置时值是"0"。
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
System.out.println(raf.getFilePointer());//
raf.write(‘A’);//写出一个字节后,指针自动向后移动到下一个字节位置
System.out.println(raf.getFilePointer());//
raf.writeInt(3);
System.out.println(raf.getFilePointer());//
raf.close();
seek方法
RandomAccessFile的提供了一个方法用于移动指针位置。
void seek(long pos)
使用该方法可以移动指针到指定位置。
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
System.out.println(raf.getFilePointer());//
raf.write(‘A’);//指针位置1
raf.writeInt(3);//指针位置5
raf.seek(0);//将指针移动到文件开始处(第一个字节的位置)
System.out.println(raf.getFilePointer());//
raf.close();
skipBytes方法
RandomAccessFile的提供了一个方法可以尝试跳过输入的 n 个字节以丢弃跳过的字节,方法定义为:
int skipBytes(int n)
该方法可能跳过一些较少数量的字节(可能包括零)。这可能由任意数量的条件引起;在跳过n个字节之前已到达文件的末尾只是其中的一种可能。此方法不抛出 EOFException。返回跳过的实际字节数。如果 n 为负数,则不跳过任何字节。
最新文章
- DDR相关的低功耗技术之PASR、TCSR、DPD
- ionic中关于ionicView 的生命周期
- dolby逝世:纪念一下
- ruby的在ubuntu上的安装
- BITED-Windows8应用开发学习札记之四:如何在Win8 应用中实现语义缩放
- fcntl记录锁实例
- RAW碰到的问题与功能的测试
- python开发_tkinter_小球完全弹性碰撞游戏
- JavaWeb开发之Servlet
- 程序员的职场潜意识Top10
- [HNOI2009]最小圈
- SSRF漏洞浅析
- python框架之Django(6)-查询优化之select_related&;prefetch_related
- linux中Java项目占用cpu、内存过高时的排查经历
- Gnome增加消息提醒extension ( Fedora 28 )
- Docker 使用Docker知识简易部署一个LNMP平台
- Lua------------------改善Unity编辑器对Lua文件的支持
- Velocity学习笔记
- 移动端利用chrome浏览器在PC端进行调试方法
- 插件使用-HighChart
热门文章
- Apache代理技术
- shell编程初探
- 【leetcode】1283. Find the Smallest Divisor Given a Threshold
- 网络摘抄jdk1.8——jvm分析与调优
- 33. ClustrixDB 扩展集群的容量-Flex up
- 数据类型之字符串类型与Number类型
- CSS3选择器:nth-child和:nth-of-type的差异
- 51 Nod 1092 回文字符串
- maven项目启动找不到org.springframework.web.context.ContextLoaderListener
- codeforces613E