Java学习之输入输出流(1)——File类学习

本文深入讲解Java中的File类,包括其特点、构造方法、文件处理方法(如mkdir(), mkdirs(), delete(), renameTo()等)、文件属性获取方法(如lastModified(), getPath(), getAbsolutePath()等)以及文件比较方法(如equals())。同时,文章提供了丰富的代码示例,帮助读者理解和掌握File类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

File类

File类特点

  1. File类所创建的对象必须要在电脑中有相应的目录/文件,否则创建的对象会为空(创建对象并不会在相应的目录中创建相应的文件/目录),这个需要通过exist()函数检测

  2. File类构造方法的多态性
    File(File parent, String child)
    在parent文件对象对应的文件目录下,创建child的文件对象。

    File(String path)
    在java文件所在的目录下创建名为path字符串变量中所储存的字符串的文件对象。

    File(String parent, String child)
    在名为parent字符串的目录下创建名为字符串child的文件对象。

    File(URI uri)
    没用过。。

  3. File类不允许访问文件内容(读写文件),也不能改变文件属性

各种文件处理方法

mkdir()方法和mkdirs()方法

mkdir()方法和mkdirs()方法都可以用于文件目录的创建,但是两个方法有点区别

mkdir():如果你想在已经存在的文件夹下建立新的文件夹,就可以用此方法。此方法不能在不存在的文件夹下建立新的文件夹。

mkdirs():如果你想根据File里的路径名建立文件夹(当你不知道此文件夹是否存在,也不知道父文件夹存在),就可用此方法,它建立文件夹的原则是:如果父文件夹不存在并且最后一级子文件夹不存在,它就自动新建所有路经里写的文件夹;如果父文件夹存在,它就直接在已经存在的父文件夹下新建子文件夹。

PS: mkdir()方法及mkdirs()方法会根据文件夹创建与否返回boolean的false与true可以根据返回值来进行编程判断目录是否创建成功。

delete()方法

既然能够创建目录那肯定也能删除目录,delete方法就是file类专门用于文件目录及文件删除的方法。

他可以删除file对象所储存的路径在电脑上对应的文件或者目录,但是,要万分注意的是,只会删除电脑上对应的文件或者文件夹,file对象本身的内容并不会清空。

例:

import java.io.*;

public class mkdir{
	public static void main(String[] args)
	{
		File tempDir = new File("C:\\Users\\楼主\\Desktop\\temp1\\temp");
		/*if(tempDir.mkdir() == false)
          {
			System.out.println("Error! Parent Directiory Not Found! "); 
			return;
          }*/
	    tempDir.delete();
		System.out.println(tempDir);
	}
}

代码运行后你会发现,目录并没有创建,但是依然能正常打印file对象的路径,而非NULL
在这里插入图片描述

renameTo()方法

既然文件及目录可以利用java进行创建以及删除,自然也可以用其进行重命名的操作,而这就需要用到我们的renameTo()方法

renameTo()方法自我感觉其实现的功能本质上是先创建一个新的文件或者目录,并将其命名成要你要命名的名字,再讲原来的文件内容复制到新的文件中并删除原文件。
比如:你想将一个原来名字为name1的文件重命名为name2,那么renameTo()方法就创建一个名字为name2的文件,再将name1文件中的内容复制到name2文件中,最后将name1文件删除。

例:
代码如下

import java.io.*;
public class 重命名及文件判等 {
  public static void main(String args[]){
	String mge;
	if(args.length != 2) {
		System.out.println("Use:java 重命名及文件判等 <file1><file2>");
		System.exit(-1);
	}
	File f1 = new File(args[0]);
	File f2 = new File(args[1]);
	if(f1.equals(f2)) {
		System.out.println(" Cannot rename a file to itself");
		System.exit(-1);
	}
	mge = f1.renameTo(f2) ? " renamed to ": "could not renamed to ";
	System.out.println(f1.getPath() + mge + f2.getPath());
 }
}

运行代码,输入如下参数
在这里插入图片描述
原本桌面上建立一个叫name1的文件夹
在这里插入图片描述
程序运行结果如下
在这里插入图片描述
并且桌面上的name1文件也重命名为了name2
在这里插入图片描述
使用注意事项

  1. 如果所在目录中已经存在了您要重命名的文件的同名文件,renameTo()方法会返回false并且重命名失败
  2. 如果重命名的File对象只有文件的名称或者相对路径而无绝对路径的话,重命名后文件会默认放在java程序所在的目录下。
  3. 尽量少用renameTo()方法,如果在各个盘之间利用renameTo()方法进行重命名的话,容易因C盘D盘文件环境(file system)不同而导致不能成功执行的Bug。所以尽量用其他函数来实现重命名功能。

equals()方法

比较两个创建文件对象的字符串是否完全相同,相同返回true否则返回false。

list()方法

返回指定目录中包含的文件名或子目录名(只有名字并不包含文件的其他属性)
list()方法常赋值给一个String数组来进行使用,否则如果直接打印会打印出一串乱码
即如:String[] ls = f.list();再打印字符串数组中的字符串
如果直接打印
System.out.println(f.list());
结果如下:
在这里插入图片描述
输出的是一串乱码

lastModified()方法

返回文件最后一次修改的时间,其值是相对于1970年1月1日的时间毫秒数,为了方便阅读,必须变成java.util.Date对象
例:
测试代码如下:

import java.io.*;
import java.util.Date;
public class lastModified方法 {
public static void main(String args[])
{
	File f = new File(args[0]);
	System.out.println(new Date(f.lastModified()));
}
}

以任意一个文件的路径作为参数运行,可以得到最后一次修改该文件的时间
在这里插入图片描述

getpath()方法

getpath()方法获取的是构建文件对象时输入的字符串
例:

import java.io.*;
public class getPath函数{
  public static void main(String[] args)
  {
	  String path;
	  File f1 = new File("ab.txt");
                  File f2 = new File(args[0]);
	  if(f2.exists() && f1.exists()) {
		  System.out.println("----------------------");
		  System.out.println("File1's Path:"+f1.getPath());
		  System.out.println("File2's Path:"+f2.getPath());
		  System.out.println("----------------------");
	  }else
		  System.out.println("Cannot found file: "+args[0]+"、 "+"hallo.txt");
	  }
   }

代码运行结果如下
在这里插入图片描述
如果更改输入的文本串为
java getPath方法 .\hallo.txt
在这里插入图片描述
不难发现file2的路径随着创建文件对象的字符串变换,getPath()方法所获得的路径也会随之变化

同理,通过代码输入字符串来更改实例化file对象,getPath()方法返回的也是实例化时输入的字符串
例:

import java.io.*;
public class getPath函数{
  public static void main(String[] args)
  {
	  String path;
	  File f1 = new File("C:\\Users\\楼主\\Desktop");
                  File f2 = new File(args[0]);
	  if(f2.exists() && f1.exists()) {
		  System.out.println("----------------------");
		  System.out.println("File1's Path:"+f1.getPath());
		  System.out.println("File2's Path:"+f2.getPath());
		  System.out.println("----------------------");
	  }else
		  System.out.println("Cannot found file:"/*+args[0]*/);
		  
	  }
   }

程序运行结果如下:

可以看到,输出的是文件对象实例化时输入的完整字符串。
PS:
在使用getpath()方法中,我发现File类在创建对象时输入’/‘和’‘是一样的,在程序中都会自动转换成表示目录层次的’’

例如使用上面的代码,输入 java getPath函数 ./hallo.txt
(注意,我这里打的是‘/’而非表文件目录层次的如’C:\desktop’中的‘\’)

代码运行结果如下:
在这里插入图片描述
可以发现,’/‘在文本层次中自动转换成了’’

getAbsolutePath()方法

getAbsolutePath()方法返回的是一个文件的绝对路径,无论其对象创建的时候输入的文本、路径 是什么
例:

import java.io.*;
public class getAbsolutePath函数{
  public static void main(String[] args)
  {
	  String path;
	  File f1 = new File("C:\\Users\\楼主\\Desktop");
                  File f2 = new File(args[0]);
	  if(f2.exists() && f1.exists()) {
		  System.out.println("----------------------");
		  System.out.println("File1's AbsolutePath:"+f1.getAbsolutePath());
		  System.out.println("File2's AbsolutePath:"+f2.getAbsolutePath());
		  System.out.println("----------------------");
	  }else
		  System.out.println("Cannot found file "/*+args[0]*/);
		  
	  }
   }

运行程序,结果如下:
在这里插入图片描述
可以看到返回的是文件的绝对路径

PS: 文件对象创建时如果没有指明绝对路径,只是给出文件的名称的话,必须将文件放到和运行的java文件放在同一层目录下,否则回找不到文件。

getParent()方法

getParent()方法返回的是文件对象构造时的父目录,即构造文件对象时输入的字符串的当前文件的上一级目录的路径(不一定是绝对路径,要看构造对象时输入的是否为绝对路径),与构造对象时输入的文本字符串紧密相关。

例:

import java.io.*;
class file{
  public static void main(String args[])
  {
	  String path;
	  if(args.length != 1) {
		  System.err.println("Usage:java file类<File or Dir>");
		  System.exit(-1);
	  }
	  File f = new File(args[0]);
	  if(f.exists()) {
		  System.out.println("----------------------");
		  System.out.println("Absolute path:"+f.getAbsolutePath());
		  System.out.println("File path:"+f.getPath());
		  System.out.println("File Name:"+f.getName());
		  System.out.println("Parent Directory:"+f.getParent());
		  System.out.println("----------------------");
		  String canRead = f.canRead() ? "Yes" : "No";
		  String canWrite = f.canWrite() ? "Yes" : "No";
		  String isFile = f.isFile() ? "Yes" : "No";
		  String isDir = f.isDirectory() ? "Yes" : "No";
		  String isAbs = f.isAbsolute() ? "Yes" : "No";
		  System.out.println("Readable:"+canRead);
		  System.out.println("Writable:"+canWrite);
		  System.out.println("Is file:"+isFile);
		  System.out.println("Is directory"+isDir);
		  System.out.println("Is absolute path:"+isAbs);
	  }else
		  System.out.println("Cannot found file:"+args[0]);
		  
	  }
   }

分别以hallo.docx和./hallo.docx作为main函数的args[0]输入发现getParent()方法返回的分别为NULL 和 . 说明getParent()方法返回的是构造文件对象时当前文件的上一层目录的路径字符串。
在这里插入图片描述

isAbsolute()方法

判断构造文件对象时所输入的文件路径是否为绝对路径,如果是就返回boolean的yes否则返回no。

需要注意的是’.\ + 文件名’并 不会被判定为绝对路径

其他方法

由于除了上述方法之外,file类的其他方法比较好理解,所以就不再详细地一一说明,只是稍微介绍一下这些函数的作用

canRead()方法

判断文件是否可读,可读返回boolean的yes否则返回no。

canWrite()方法

判断文件是否可写,用法与canRead函数相同。

isFile()方法

判断构造文件对象的文件名是否为文件,是文件返回boolean的yes否则返回no。

isDirectory()方法

判断构造文件对象的文件名是否为目录(即文件夹),是的话返回Boolean的yes否则返回no。

getName()方法

返回文件对象不包含路径的文件名字。如.\hallo.docx返回的是hallo.docx。

附 ecplise 常用快捷键及常见问题解决方法

  1. 变量名与字符串的快捷替换
    选中要替换的变量名或者字符串再按 ctrl + T 再选择需要的选项
  2. ecplise编辑器未包含main类型
    将要运行的java文件或者包放到src文件夹下面,如果放在其他文件夹下,会导致程序不能正常运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值