java提供了一些实现类对文件进行操作
File
对具体文件(目录)进行抽象表示。File类只用于表示文件或者目录的信息(名称、大小),不能用于文件内容的访问。
file类的方法比较多,以一个实例演示常用的几个API。
import java.io.File;
import java.io.IOException;
/**
* @program: file
* @description: File 类的使用
* @author: huang xin
* @create: 2018-11-16 11:06
*/
public class FileDemo {
public static void main(String[] args) {
//构造方法1:String类型的路径名
File file = new File("D:\\JAVA方向\\haha");
//System.out.println(file.exists());
if (!file.exists()) //判断文件状态
file.mkdir(); //创建目录
//file.mkdirs(); // 多级目录时,创建目录结构
else
file.delete(); //删除文件操作
//是否是目录(状态)
System.out.println(file.isDirectory());
//是否是文件(状态)
System.out.println(file.isFile());
//File file1 = new File("D:\\JAVA方向\\huangxin.txt");
//构造方法2:拼接路径
File file1 = new File("D:\\JAVA方向","huangxin.txt");
if (!file1.exists()) {
try {
file1.createNewFile(); //创建文件(文件操作)
} catch (IOException e) {
e.printStackTrace();
}
}
else {
file1.delete();
}
//常用的File对象API
System.out.println(file); //file.toSpring()的内容
System.out.println(file1);//D:\JAVA方向\huangxin.txt
System.out.println(file.getAbsolutePath());
System.out.println(file.getName()); //目录名
System.out.println(file1.getName()); //huangxin.txt {文件名(不包含路径)}
System.out.println(file1.getParent()); //D:\JAVA方向
System.out.println(file1.getParentFile().getAbsolutePath());
}
}
File类的进阶操作,实现目录的遍历
import java.io.File;
/**
* @program: file
* @description: 目录操作类
* @author: huang xin
* @create: 2018-11-16 13:28
*/
public class FileUtils {
/**列出指定目录下(包括其子目录)的所有文件
* 传入参数:父目录
* */
public static void listDirectory(File dir){
if (!dir.exists()){
throw new IllegalArgumentException("目录;"+ dir + "不存在");
}
if (!dir.isDirectory()){
throw new IllegalArgumentException(dir+"不是目录");
}
/* String[] filenames = dir.list(); //列出当前目录下的子目录和文件
for (String string : filenames) {
System.out.println(dir+ "\\"+string);
}*/
File[] files = dir.listFiles(); //返回的是直接子目录(文件)的抽象
if (files!=null && files.length > 0){
for (File file: files) {
if (file.isDirectory()){ //判断是目录就递归
listDirectory(file);
}else {
System.out.println(file);//不是目录就打印
}
}
}
}
}
RandomAccessFile类
见名知义,提供了对文件内容的访问,既可以读文件,也可写文件。注意 只支持字节的读和写
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
/**
* @program: file
* @description: 使用RandomAccessFile
* @author: huang xin
* @create: 2018-11-16 14:16
*/
public class RafDemo {
public static void main(String[] args) throws IOException {
File demo = new File("demo");
if (!demo.exists()){
demo.mkdir(); //创建目录
}
//构造方法3;File对象加文件名
File file = new File(demo,"raf.dat");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
/**下面用RandomAccessFile对文件操作
* A:写到文件中:
* 1、创建对象,指定读写模式
* 2、字符内容转换成字节类型
* 3、randomAccessFile对象的write()写到文件中
*
* B:读到内存中:
* 1、开辟字节数组空间
* 2、randomAccessFile对象的read()方法读到内存中
* 3、Arrays.toString(buf) 将字节数组转成字符串
*
* 注意:文件记录指针,表示当前程序读写位置。写好文件后想重新读文件需要seek(0)
* */
RandomAccessFile raf = new RandomAccessFile(file,"rw"); //创建对象,指定读写权限
System.out.println(raf.getFilePointer());//获取指针的位置
int i = 0x7ffffff; //最大的整数
raf.writeInt(i); //直接写入int类型,里面实现也是byte写入
//写入字节数组
String s = "中";
byte[] gbk = s.getBytes("gbk");
raf.write(gbk);
System.out.println(raf.getFilePointer());
System.out.println(raf.length());
//读文件,必须把指针移到头部
raf.seek(0);
//一次性把文件的内容读到字节数组中
byte[] buf = new byte[(int)raf.length()];
raf.read(buf);
System.out.println(Arrays.toString(buf));
raf.close();
}
}