[Java IO]01_File类和RandomAccessFile类
File类
File类是java.io包中唯一对文件本身进行操作的类。它可以进行创建、删除文件等操作。
File类常用操作
(1)创建文件
(2)删除文件
import java.io.File;
import java.io.IOException;
public class FileDemo01 {
public static void createFile(String filepath) {
File f = new File(filepath);
System.out.println("[Create File] " + f.getPath().toString());
try {
f.createNewFile(); // 创建文件,根据给定的路径创建
} catch (IOException e) {
e.printStackTrace(); // 输出异常信息
}
}
public static void deleteFile(String filepath) {
File f = new File(filepath);
System.out.println("[Delete File] " + f.getPath().toString());
if(f.exists()){ // 如果文件存在则删除
f.delete(); // 创建文件,根据给定的路径创建
}
}
public static void main(String args[]) {
// 注意三种分隔符方式
String path1 = "d:\\test1.txt"; // Windows中使用反斜杠表示目录的分隔符"\"
String path2 = "d:/test2.txt"; // Linux中使用正斜杠表示目录的分隔符"/"
String path3 = "d:" + File.separator + "test3.txt"; // 最好的做法是使用File.separator,可以根据所在操作系统选取对应分隔符
createFile(path1);
createFile(path2);
createFile(path3);
deleteFile(path1);
}
};
(3)创建文件夹
import java.io.File;
public class FileDemo02 {
public static void main(String args[]) {
File f = new File("d:\\abc\\test"); // 实例化File类的对象
f.mkdir(); // 创建文件夹
// f.mkdirs(); // 创建文件夹,如果父路径不存在,会一并创建
}
};
(4)列出指定目录全部文件
import java.io.File;
public class FileDemo03 {
public static void testListFiles1(String path) {
File f = new File(path); // 实例化File类的对象
String str[] = f.list(); // 列出给定目录中的内容
System.out.println("[list]");
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
}
public static void testListFiles2(String path) {
File f = new File(path); // 实例化File类的对象
File files[] = f.listFiles(); // 列出全部内容
System.out.println("[listFiles]");
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
public static void main(String args[]) {
String path = "d:" + File.separator;
testListFiles1(path);
testListFiles2(path);
}
};
(5)删除目录
import java.io.File;
public class DeleteDirectory {
/**
* 删除空目录,如果目录不为空,无法删除
* @param dir
*/
private static void deleteEmptyDir(String dir) {
File f = new File(dir);
boolean success = f.delete();
if (success) {
System.out.println("Success to deleted " + dir);
} else {
System.out.println("Failed to delete " + dir);
}
}
/**
* 如果传入的是一个目录对象,遍历删除其所有子文件和子目录
* @param dir
* @return
*/
private static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
File[] children = dir.listFiles();// 递归删除目录中的子目录下
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(children[i]);
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
public static void main(String[] args) {
String emptyDir = "d:\\empty";
String dir2 = "d:\\test";
deleteEmptyDir(emptyDir);
boolean success = deleteDir(new File(dir2));
if (success) {
System.out.println("Success to deleted " + dir2);
} else {
System.out.println("Failed to delete " + dir2);
}
}
}
RandomAccessFile类
它适用于由大小已知的记录组成的文件,所以我们可以使用seek()将记录从一处转移到另一处,然后读取或者修改记录。
文件中记录的大小不一定都相同,只要能够确定哪些记录有多大以及它们在文件中的位置即可。
(1)写入数据
import java.io.File;
import java.io.RandomAccessFile;
public class RandomAccessFileDemo01 {
// 所有的异常直接抛出,程序中不再进行处理
public static void main(String args[]) throws Exception {
File f = new File("d:" + File.separator + "test.txt"); // 指定要操作的文件
RandomAccessFile rdf = null; // 声明RandomAccessFile类的对象
rdf = new RandomAccessFile(f, "rw");// 读写模式,如果文件不存在,会自动创建
String name = null;
int age = 0;
name = "zhangsan"; // 字符串长度为8
age = 30; // 数字的长度为4
rdf.writeBytes(name); // 将姓名写入文件之中
rdf.writeInt(age); // 将年龄写入文件之中
name = "lisi "; // 字符串长度为8
age = 31; // 数字的长度为4
rdf.writeBytes(name); // 将姓名写入文件之中
rdf.writeInt(age); // 将年龄写入文件之中
name = "wangwu "; // 字符串长度为8
age = 32; // 数字的长度为4
rdf.writeBytes(name); // 将姓名写入文件之中
rdf.writeInt(age); // 将年龄写入文件之中
rdf.close(); // 关闭
}
};
(2)读取数据
import java.io.File;
import java.io.RandomAccessFile; public class RandomAccessFileDemo02{
// 所有的异常直接抛出,程序中不再进行处理
public static void main(String args[]) throws Exception{
File f = new File("d:" + File.separator + "test.txt") ; // 指定要操作的文件
RandomAccessFile rdf = null ; // 声明RandomAccessFile类的对象
rdf = new RandomAccessFile(f,"r") ;// 以只读的方式打开文件
String name = null ;
int age = 0 ;
byte b[] = new byte[8] ; // 开辟byte数组
// 读取第二个人的信息,意味着要空出第一个人的信息
rdf.skipBytes(12) ; // 跳过第一个人的信息
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 读取一个字节
}
name = new String(b) ; // 将读取出来的byte数组变为字符串
age = rdf.readInt() ; // 读取数字
System.out.println("第二个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
// 读取第一个人的信息
rdf.seek(0) ; // 指针回到文件的开头
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 读取一个字节
}
name = new String(b) ; // 将读取出来的byte数组变为字符串
age = rdf.readInt() ; // 读取数字
System.out.println("第一个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
rdf.skipBytes(12) ; // 空出第二个人的信息
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 读取一个字节
}
name = new String(b) ; // 将读取出来的byte数组变为字符串
age = rdf.readInt() ; // 读取数字
System.out.println("第三个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
rdf.close() ; // 关闭
}
};
运行结果
第二个人的信息 --> 姓名:lisi ;年龄:31
第一个人的信息 --> 姓名:zhangsan;年龄:30
第三个人的信息 --> 姓名:wangwu ;年龄:32
参考资料
Java 编程思想
Java 开发实战经典
[Java IO]01_File类和RandomAccessFile类的更多相关文章
- Java基础(二十八)Java IO(5)RandomAccessFile类与过滤器流(Filter Stream)
一.RandomAccessFile类 使用RandomAccessFile类可以读取任意位置数据的文件. 1.构造方法 RandomAccessFile(String name, String mo ...
- Java IO编程——File文件操作类
在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一 一个与文件本身操作(创建.删除.重命名等 ...
- 系统学习 Java IO (十六)----这么多类,应该用哪个?
目录:系统学习 Java IO---- 目录,概览 Java IO目的和功能 Java IO 包含 InputStream,OutputStream,Reader 和 Writer 类的许多子类. 原 ...
- IO包中的RandomAccessFile类
RandomAccessFile RandomAccessFile 是随机访问文件的类.它支持对文件随机访问的读取和写入,即我们也可以从指定的位置读取/写入文件数据,因为该类在其内部封装了一个数组和指 ...
- Java IO 技术之基本流类
流式IO 流(Stream)是字节的源或目的. 两种基本的流是:输入流(Input Stream)和输出流(Output Stream).可从中读出一系列字节的对象称为输入流.而能向其 ...
- Java IO流中的File类学习总结
一.File类概述 File类位于java.io包中,是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. File类有多种重载的构造方法.File类保存文件或目录的各种 ...
- JAVA IO分析一:File类、字节流、字符流、字节字符转换流
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)
1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...
- DataInputStream类和RandomAccessFile类的使用方法
// DataInputStream类实现了DataInput接口,要想从文件中读入二进制数据, // 你需要将DataInputStream与某个字节源相结合,例如FileInputStream / ...
随机推荐
- 爬虫初探(2)之requests
关于请求网络,requests这个库是爬虫经常用到的一个第三方库. import requests url = 'http://www.baidu.com' #这里用get方法用来请求网页,其他还有p ...
- bgp多线
BGP(边界网关协议)主要用于互联网AS(自治系统)之间的互联,BGP的最主要功能在于控制路由的传播和选择最好的路由. 中国网通 .中国电信.中国铁通.教育网和一些大的民营IDC运营商都具有AS号,全 ...
- LogStash-2.4.0自定义区域信息插件-ISP
由于直接复制粘贴有问题,所以给出链接: http://note.youdao.com/share/?id=6dfb1f03240e156c1db4a56c85e3b6db&type=note# ...
- org.apache.jasper.JasperException:省略"/html/sysmaintain/authority/user/../../module/verify_login.jsp" not found
说明了JSP页面里引用安全登录页面的jsp路径代码:<%@ include file="../../module/verify_login.jsp"%>这句代码引用的路 ...
- python文件读取
1.如何将一个“lessons.txt”文档一行行输出? myfile = file(‘lessons.txt’) for f in myfile.readlines(): print f myfil ...
- 2013年度IT博客大赛跻身10强
2013年12月26日,由51CTO独家举办的2013年度IT博客大赛圆满落幕,荣幸跻身10强[http://fellow.51cto.com/art/201312/425528.htm],首先感谢各 ...
- HTTPS工作原理
HTTPS是什么 HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,及以安全为目标的HTTP通道,简单说就是HTTP的安全版本. ...
- EF:Fluent API 把一对多映射为一对一
假设有两张表:A表和B表.A表与B表在数据库中的关系是一对多,但我们需要在EF中映射为一对一. 首先在A实体类和B实体类中互相为对方增加一个实体类的属性: public A { public B B ...
- C语言 · 回文数
问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数. 输出格式 按从小到大的顺序输出满足条件的四位十进制数. 方案一: int main(){ int ...
- Mac下安装与配置Go语言开发环境
1.官网下载安装包(需FQ) https://storage.googleapis.com/golang/go1.7.darwin-amd64.pkg 2.配置Go环境变量GOPATH和GOBIN ( ...