java——File类文件操作全解

JAVA使用File类对文件进行操作。在很多教程中,我们会同时学到File类和类似FileInputStream这样的流,非常容易将两者混淆。实际上只要掌握了他们的工作原理就不难理解,File类以操作文件的属性和状态为主,而IO流以在两个客户端之间传输数据为主。虽然同是操作文件但出发点是不同的。File类很简单,我们通过实际的例子来学习它的常用API方法。

File类规则约定

当程序接触到底层的操作系统时,一些细小而繁杂的事引起了File类开发者的注意。
他们为了避免将问题复杂化,采用了下面四种约定将JAVA和文件系统在一定程度上良好的结合。

路径名约定

  1. 对于 UNIX 平台,绝对路径名的前缀始终是 “/”。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 “/” 且名称序列为空。

  2. 对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 “:” 组成。如果路径名是绝对路径名,还可能后跟 “\\”。UNC 路径名的前缀是 “\\\\”;主机名和共享名是名称序列中的前两个名称。没有指定驱动器的相对路径名没有前缀。

通常,我们在使用windows操作系统下,可以采用”\\”或”/”来表示路径的分隔符,反斜杠需要写两个为了表示转义的意思。

分区约定

此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录。如果它表示这种对象,那么该对象驻留在一个分区 中。分区是文件系统特定于操作系统的存储分区。一个存储设备(例如,物理磁盘驱动器、闪存、CD-ROM)可以包含多个分区。对象(如果有)将驻留在此路径名(绝对形式)某个祖先指定的分区上。

权限约定

文件系统可以实现对实际文件系统对象上的某些操作(比如,读、写、执行)进行限制。这些限制统称为访问权限。文件系统可以对一个对象设置多个访问权限。例如,一个设置可能适用于对象的所有者,另一个设置则可能适用于所有其他用户。对象上的访问权限可能导致此类的某些方法执行失败。

不可变约定

File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。

构造器方法

    //1
    File f1 =new File("c:\\a\\b.txt");

    //2
    File f2 =new File("c:\\a","c.txt");

    //3
    File f3 =new File("c:"+File.separator+"abc");
    File f4 =new File(f3,"3.txt");

File类构造方法有4种,其中3种比较常用。
File.separator是File类的一个字段separator,在任何平台中可以充当当前操作系统的文件分隔符。

创建文件方法

public boolean createNewFile( ) throws IOException

当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。检查文件是否存在,若不存在则创建该文件,这是单个操作,对于其他所有可能影响该文件的文件系统活动来说,该操作是不可分的。

返回:
如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false

public boolean mkdirs( )

创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。

返回:
当且仅当已创建目录以及所有必需的父目录时,返回 true;否则返回 false

获取文件信息方法

public File getAbsoluteFile( )

返回此抽象路径名的绝对路径名形式。等同于 new File(this.getAbsolutePath())。

返回:
绝对抽象路径名,它与此抽象路径名表示相同的文件或目录

public String getName( )

返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。

返回:
此抽象路径名表示的文件或目录的名称;如果路径名的名称序列为空,则返回空字符串

public String getParent( )

返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
抽象路径名的父 路径名由路径名的前缀(如果有),以及路径名名称序列中最后一个名称以外的所有名称组成。如果名称序列为空,那么该路径名没有指定父目录。

返回:
此抽象路径名指定父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null

getParentFile

public File getParentFile( )

返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
抽象路径名的父 路径名由路径名的前缀(如果有),以及路径名名称序列中最后一个名称以外的所有名称组成。如果名称序列为空,那么该路径名没有指定父目录。

返回:
此抽象路径名指定父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null

public long length( )

返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。

返回:
此抽象路径名表示的文件的长度,以字节为单位;如果文件不存在,则返回 0L。对于表示特定于系统的实体(比如设备或管道)的路径名,某些操作系统可能返回 0L。

判断文件状态方法

public boolean isAbsolute( )

测试此抽象路径名是否为绝对路径名。绝对路径名的定义与系统有关。在 UNIX 系统上,如果路径名的前缀是 “/”,那么该路径名是绝对路径名。在 Microsoft Windows 系统上,如果路径名的前缀是后跟 “\” 的盘符,或者是 “\\\\”,那么该路径名是绝对路径名。

返回:
如果此抽象路径名是绝对路径名,则返回 true;否则返回 false

public boolean isDirectory( )

测试此抽象路径名表示的文件是否是一个目录。

返回:
当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true;否则返回 false

public boolean isFile( )

测试此抽象路径名表示的文件是否是一个标准文件。如果该文件不是一个目录,并且满足其他与系统有关的标准,那么该文件是标准 文件。由 Java 应用程序创建的所有非目录文件一定是标准文件。

返回:
当且仅当此抽象路径名表示的文件存在且 是一个标准文件时,返回 true;否则返回 false

public boolean isHidden( )

测试此抽象路径名指定的文件是否是一个隐藏文件。隐藏 的具体定义与系统有关。在 UNIX 系统上,如果文件名以句点字符 (‘.’) 开头,则认为该文件被隐藏。在 Microsoft Windows 系统上,如果在文件系统中文件被标记为隐藏,则认为该文件被隐藏。

返回:
当且仅当此抽象路径名表示的文件根据底层平台约定是隐藏文件时,返回 true

public boolean canExecute( )

测试应用程序是否可以执行此抽象路径名表示的文件。

返回:
当且仅当抽象路径名存在且 允许应用程序执行文件时返回 true。

public boolean canRead( )

测试应用程序是否可以读取此抽象路径名表示的文件。

返回:
当且仅当此抽象路径名指定的文件存在且 可被应用程序读取时,返回 true;否则返回 false

public boolean canWrite( )

测试应用程序是否可以修改此抽象路径名表示的文件。

返回:
当且仅当文件系统实际包含此抽象路径名表示的文件且 允许应用程序对该文件进行写入时,返回 true;否则返回 false。

public boolean exists( )

测试此抽象路径名表示的文件或目录是否存在。

返回:
当且仅当此抽象路径名表示的文件或目录存在时,返回 true;否则返回 false

删除文件方法

public boolean delete( )

删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。

返回:
当且仅当成功删除文件或目录时,返回 true;否则返回 false

public void deleteOnExit( )

在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 文件(或目录)将以与注册相反的顺序删除。调用此方法删除已注册为删除的文件或目录无效。根据 Java 语言规范中的定义,只有在虚拟机正常终止时,才会尝试执行删除操作。
一旦请求了删除操作,就无法取消该请求。所以应小心使用此方法。

操作文件方法

public File[] listFiles( )

返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个 File 对象数组,每个数组元素对应目录中的每个文件或目录。表示目录本身及其父目录的名称不包括在结果中。得到的每个抽象路径名都是根据此抽象路径名,使用 File(File, String) 构造方法构造的。所以,如果此路径名是绝对路径名,那么得到的每个路径名都是绝对路径名;如果此路径名是相对路径名,那么得到的每个路径名都是相对于同一目录的路径名。

不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。

返回:
抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。

public String toString( )

返回此抽象路径名的路径名字符串。该字符串就是 getPath() 方法返回的字符串。

public String[] list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。除了返回数组中的字符串必须满足过滤器外,此方法的行为与 list() 方法相同。如果给定 filter 为 null,则接受所有名称。否则,当且仅当在此抽象路径名及其表示的目录中的文件名或目录名上调用过滤器的 FilenameFilter.accept(java.io.File, java.lang.String) 方法返回 true 时,该名称才满足过滤器。

返回:
字符串数组,这些字符串指定此抽象路径名表示的目录中给定 filter 能接受的文件和目录。如果目录为空,或者没有名称被过滤器接受,那么该数组将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。

public static File[] listRoots( )

列出可用的文件系统根。
特定 Java 平台可以支持零个或更多个分层组织的文件系统。每个文件系统有一个 root 目录,可以从这里到达文件系统中的所有其他文件。例如,Windows 平台为每个活动驱动器提供了一个根目录;UNIX 平台只有一个根目录,即 “/”。可用文件系统根的设置受各种系统级操作的影响,比如可移动介质的插入和弹出,以及断开或卸载那些物理磁盘或虚拟磁盘。

此方法返回一个 File 对象数组,这些对象表示可用文件系统根的根目录。可以保证本地机器上物理存在的任何文件的规范路径名都以此方法返回的根之一开始。

返回:
表示可用文件系统根的 File 对象数组;如果无法确定根集,则返回 null。如果没有文件系统,那么该数组将为空。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用JavaIO流和字符串操作来修改txt文件中某一行的内容。具体步骤如下: 1. 创建一个File对象来表示要修改的txt文件。 2. 创建一个BufferedReader对象来读取txt文件内容。 3. 创建一个StringBuilder对象来存储修改后的txt文件内容。 4. 通过BufferedReader对象逐行读取txt文件内容,并在需要修改的行进行字符串替换操作。 5. 将修改后的内容写入StringBuilder对象中。 6. 关闭BufferedReader对象。 7. 创建一个FileWriter对象来写入修改后的内容。 8. 将StringBuilder对象中的内容写入txt文件。 9. 关闭FileWriter对象。 下面是一个修改txt文件中某一行内容的示例代码: ```java import java.io.*; public class ModifyTxtFile { public static void main(String[] args) { String filePath = "test.txt"; // 要修改的txt文件路径 int lineNumber = 3; // 要修改的行号 String newLineContent = "This is the new line content."; // 修改后的内容 try { // 创建File对象 File file = new File(filePath); // 创建BufferedReader对象 BufferedReader reader = new BufferedReader(new FileReader(file)); // 创建StringBuilder对象 StringBuilder sb = new StringBuilder(); // 逐行读取txt文件内容并进行替换操作 String line; int lineNum = 1; while ((line = reader.readLine()) != null) { if (lineNum == lineNumber) { sb.append(newLineContent).append(System.lineSeparator()); // 添加修改后的内容 } else { sb.append(line).append(System.lineSeparator()); // 添加原内容 } lineNum++; } // 关闭BufferedReader对象 reader.close(); // 创建FileWriter对象 FileWriter writer = new FileWriter(file); // 将StringBuilder对象中的内容写入txt文件 writer.write(sb.toString()); // 关闭FileWriter对象 writer.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个示例中,我们将第3行的内容修改为"This is the new line content."。你可以根据自己的需求修改这个示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值