Java基本的文件操作
文章目录
前言
本片博客并没有太多深入的东西,只是一些Java文件操作的小例子,方便刚接触文件的玩家快速上手。大家可以把这里面的所有代码都复制出去,自己运行试一试。
1.File类的基本用法
public static void main(String[] args) {
File file = new File("D:\\临时学习\\机器视觉\\机器视觉实验报告模板.docx");
//File初始化时需要一个文件的路径;
System.out.println("file: " + file);
//输出一下这个file对象看一下,不管这个路径正确与否他都会输出并且不会报异常
File parentFile = file.getParentFile();
//可以得到file对像的上一层路径
System.out.println("parentFile: " + parentFile);
//输出一下这个parentFile对象看一下
System.out.println(file.exists());
//File对象初始化时,不论填入的路径正确与否它都不会出异常,所以要用file.exists()这个方法来判定这个路径在你电脑里是否真的存在
System.out.println("是否为目录:" +file.isDirectory());
//判断这个file是否是一个目录
System.out.println("是否为文件:" + file.isFile());
//判断这个file是否是一个文件
}
注意:你的电脑上肯定不会有 “D:\临时学习\机器视觉\机器视觉实验报告模板.docx” 这个路径。运行时注意更改哦。
运行结果:
2.File类的升级用法
通过上面了解我们知道了怎么判断一个file对象是否是一个目录,或者是一个文件,那么问题来了
如果是一个文件,如何知道这个文件有多少字节(即文件的大小)
如果是一个目录,如何得知其子目录
2.1得知一个文件的大小(单位:字节)
public static void main(String[] args) {
File file = new File("D:\\临时学习\\机器视觉\\机器视觉实验报告模板.docx");
System.out.println("文件的大小:" + file.length() + "字节");
//这个比较容易我就不做输出演示了
}
2.2得知一个目录的子目录或者子文件
public static void main(String[] args) {
File file = new File("D:\\临时学习\\机器视觉");
File[] Childfiles = file.listFiles();//得到该目录的下一级列表
for (File oneFile : Childfiles) {
System.out.println(oneFile);
}
}
运行结果:
2.3得知一个磁盘的总空间和剩余空间
public static void main(String[] args) {
File file = new File("D:");
System.out.println("D盘的总空间为:" + file.getTotalSpace());
System.out.println("D盘的剩余空间为:" + file.getFreeSpace());
}
3.文件的读写
//这是一个很基础的文件读写,将一个文件的所有内容读出来再写到另一个路径下
public static void main(String[] args) {
File file = new File("D:\\临时学习\\机器视觉\\第四次实验\\第四次机器视觉实验.docx");
try {
FileInputStream fis = new FileInputStream(file);
//初始化文件输入流,用于文件的读
FileOutputStream fos = new FileOutputStream("D:\\临时学习\\123.docx");
//初始化文件输出流,用于文件的写,这块有个要注意地方,如果该目录下没有这个文件,会帮你创建,但是不会创建目录,如果有的话会把原来的文件清空,所以这块要注意
byte[] readbytes = new byte[(int) file.length()];
//使用即将要读的文件的大小来初始化一缓冲区来放置读出来的内容
fis.read(readbytes);//将读出来内容放置在readbytes中
fos.write(readbytes);
//将readbytes中的内容写入对应的文件中
fis.close();
fos.close();
//文件是系统宝贵的资源,用完后要进行关闭
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
文件的读写还有一种用法,如下图所示
这种用法有一个坑,首先我先解释一下这三个参数
1.第一个参数 byte[] b
b是一个缓冲区,读的内容会放在这里,写的内容也是从这里取
2.第二个参数 int off
off的意思是偏移量,这个偏移量不是文件流中的偏移量
比如 fis.read(b, 5, 14);
很多刚接触文件的同学会把这行代码理解成把文件中从第5个字节开始的14个字节读出来放入到缓冲区b中。这是错误的
这里的偏移量是指缓冲区中的偏移量
所以 fis.read(b, 5, 14);这行代码的正确理解为
从文件中读14个字节,把它放入到缓冲区b下标为5的地方,也就是说读出的字节放在以b数组的b[5]~b[18]的空间里,下标5到13,刚好可以放14个字节。
3.第三个参数 int len
len代表你要读的字节的数量,通俗一点就是你要从文件中读多少个字节
4.RandomAccessFile类
如果真的想把文件从第off个字节开始的len个字节读出来怎么办
还是上面的例子 fis.read(b, 5, 14);
如果我想实现这个**把文件中从第5个字节开始的14个字节读出来放入到缓冲区b中。**就得使用RandomAccessFile类
public static void main(String[] args) {
File src = new File("D:\\临时学习\\机器视觉\\第四次实验\\第四次机器视觉实验.docx");
File target = new File("D:\\临时学习\\123.docx");
try {
RandomAccessFile srcRaf = new RandomAccessFile(src, "rw");
//这里的rw意思以读写的方式打开,还有一种常用的方式r,意思是读的方式
RandomAccessFile targetRaf = new RandomAccessFile(target, "rw");
byte[] result = new byte[14];
srcRaf.seek(5);
//将文件指针指向第五个字节
srcRaf.read(result);
//从第五个字节开始读14个字节
targetRaf.seek(5);
//将文件指针指向第五个字节
targetRaf.write(result);
//从第五个字节开始读写个字节
srcRaf.close();
targetRaf.close();
//RandomAccessFile对象使用完之后也需要关闭
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
5.创建目录
创建目录有两个方法mkdir()或mkdirs(),返回值都为tboolean类型,true代表创建成功,false代表创建失败。如果你要创建的目录已经存在就会返回false
File file = new File("D:\\临时学习\\机器视觉\\机器视觉实验报告模板\\我要创建的新文件");
//"我要创建的新文件" 这个是我要创建的新目录的名字
File parentFile = file.getParentFile();
//得到file对像的上一层路径即D:\\临时学习\\机器视觉\\机器视觉实验报告模板
parentFile.mkdir();//用上一级的路径进行创建
mkdir()和mkdirs()用法基本一样,区别在于:
假设你要创建的新目录为D:\src\com\mec\new"
1.如果你的电脑里不存在D:\src\com\mec,当你使用mkdir()时会失败,new这个目录并不会创建出来,
2.如果使用mkdirs()的话,如果你的电脑里不存在D:\src\com\mec会先帮你创建,然后在创建new目录
6.总结
我本人也不是什么大佬,上面说到的内容并不是所有的Java文件操作,只是我用到过的,本文章原创,如有什么内容的错误或者内容补充,请反映公众号
编程学习讨论群:534150958(新建的,可能人有些少)