[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 / ...
随机推荐
- nginx-nginx脚本
#!/bin/bash #nx Startup script for the Nginx HTTP Server # it is v. version. # chkconfig: - # descri ...
- Information Management Policy(信息管理策略)的使用范例
基础知识 很多人都会定期收拾自己的书架或者抽屉,把里面过旧的资料拿走,为新的资料腾出空间来,这样既可以节省空间,而且当冗余资料过多的时候也会降低你查找的速度和效率.那么,在企业的SharePoint中 ...
- 关于c++的 vector 容器的使用及创建方法
1.vector向量容器的使用,vector具有自动管理的功能,可以进行元素的查找删除 创建方法: (1) vector<int > v; 创建了一个v的容器,没指定容量: (2) v ...
- ArcGIS之Cartogram地图变形记
一.地图会说谎 地图作为真实世界的抽象,是“用图说话”最可靠的工具,但是有的时候地图也会撒一些小小的谎言,其中最著名的例子当属美国总统大选.如图1是2012年美国总统大选后网上给出的一个结果图,红色代 ...
- C语言 · 2的次幂表示
问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 ...
- Chrome开发者工具不完全指南(四、性能进阶篇)
前言 Profiles面板功能的作用主要是监控网页中各种方法执行时间和内存的变化,简单来说它就是Timeline的数字化版本.它的功能选项卡不是很多(只有三个),操作起来比较前面的几块功能版本来说简单 ...
- GridView中数据的汇总方法
首先,在页面添加事件<ASP:GridView OnRowDataBound="Gridview1_DataBound"> 其次,后台具体方法: public void ...
- WCF学习之旅—WCF概述(四)
一.WCF概述 1) 什么是WCF? Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终 ...
- 移动端页面按手机屏幕分辨率自动缩放的js
<script> var phoneWidth = parseInt(window.screen.width); var phoneHeight = parseInt(window.scr ...
- 解密jQuery内核 样式操作
基础回顾 jQuery里节点样式读取以及设置都是通过.css()这个方法来实现的,本章通一下分解探究下jquery里这部分代码的实现 那么jQuery要处理样式的哪些问题? 先简单回顾下样式操作会遇到 ...