java语法-File类

1(了解)、File类中有两个重要的静态成员变量 —— File.pathSeparator 和 File.separator,它们分别是什么?

 pathSeparator = 路径分隔符,在windows是分号;在Linux是冒号:
 separator = 文件名称分隔符,在windows是反斜杠\  在Linux是正斜杠/

2、绝对路径和相对路径的区别是什么?

绝对路径是以盘符为首;
相对路径是简写的路径,相对的是当前项目路径的根目录;

3(了解)、File类的构造方法有哪些?

 File f = new File(绝对路径);
 File f = new File(相对路径);
 File f = new File(父路径,子路径); // 这里的父路径可以是String类,也可以是File类

4(了解)、File类的重要的成员方法有哪些?

f.getAbsolutePath(); // 得到绝对路径
f.getpath(); // 得到绝对路径或者相对路径,f 给的是啥就是啥
f.getName(); // 得到路径的结尾部分 --> 一个文件或者文件夹
f.length(); // 得到文件的大小且以子接为单位 或 0字节(文件不存在或者没有大小概念的文件夹)


f.exists(); // 构造方法的路径是否存在
f.isDirectory(); // 是否是文件夹结尾,路径不存在返回 false,
f.isFile(); // 是否是文件结尾,路径不存在返回 false;用以上两个方法可以加个 if (路径存在)前提


f.createNewFile(); // 创建新文件,文件不存在,返回 true;只能创建文件,不能创建文件夹;路径必须存在否则抛出异常
File f = new File(文件名);f.mkdir(); // 文件夹不存在,创建单级文件夹,返回true;
File f = new File(文件名);f.mkdirs(); // 文件夹不存在,创建多级或单级文件夹,返回true;
File f = new File(文件名);f.delete();  // 用时查

5(了解)、如何用File类遍历文件夹目录?

f.list(); // 存储在一个String类的数组中
f.listFiles(); // 存储在一个File类的数组中

6、如何使用文件过滤器?

File[] files = f.listFiles(FileFilter filter); // 用来过滤文件,需要重写FileFilter接口的
acecpt(File pathname)方法
File[] files = f.listFiles(FilenameFilter filter) // 用来过滤文件名称,需要重写FilenameFilter接口的
accept(File dir, String name)方法 —— dir 是目录,name是文件名
实现类中的 accept(...)方法就是重新定义过滤的规则 —— 返回 true 的文件将被过滤出来保存在数组中
public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        String s = pathname.getName();
        if(s.endsWith(".pdf")) return true;
        else return false;
    }
}
public class FilenameFilterImpl implements FilenameFilter {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".pdf");
    }
}
public class FileFilterTest {
    public static void main(String[] args) {
        File dir = new File("D:\\HTH");
        File[] arr = dir.listFiles(new FileFilterImpl());
        for (File f : arr) {
            System.out.println(f);
        }

        File dir2 = new File("D:\\开题报告");
        File[] arr2 = dir2.listFiles(new FilenameFilterImpl());
        for (File f : arr2) {
            System.out.println(f);
        }
    }
}

重点:
调用File对象的listFiles(…)重载方法;
重写接口的accept(…)方法

<think>好的,用户想了解Java中文件操作的方法和示例。首先,我需要整理Java文件操作的基础知识,比如创建、读取、写入、删除文件等。根据提供的引用资料,用户提到java.io和java.nio包,还有具体的工具和示例代码。我需要确保覆盖这些方面,并且提供清晰的示例。 首先,分几个主要部分:基础文件操作(创建、删除)、读写文件的方法(字节流、字符流、缓冲流等)、文件复制和工具。每个部分都要有代码示例,同时要注意使用正确的LaTeX格式,比如行内公式用$...$,独立公式用$$...$$,不过这里可能主要是代码块,所以需要检查是否有数学表达式需要处理。 然后,需要参考用户提供的三个引用内容。引用1提到了java.io和java.nio包,应该涵盖这两个包中的和方法。引用2提到工具,可以介绍一个常用的FileUtils工具,或者Apache Commons IO的FileUtils。引用3给出了读取文件的示例代码,比如使用FileInputStream、BufferedReader和Scanner,这些都需要详细说明。 接下来,要确保结构清晰,每个部分有小标题,代码示例用正确的格式。比如创建文件可以用FileFiles两种方式。读取文件部分分字节流和字符流,缓冲流的使用可以提高效率,这部分需要强调。 在编写代码示例时,注意异常处理,比如try-catch块,关闭资源等。对于Java 7及以后的版本,可以使用try-with-resources来自动关闭资源,这也是一个值得提到的点。 另外,用户可能关心不同方法的优缺点,比如使用BufferedReader比FileReader更高效,或者NIO的Files方法更简洁。这些比较可以帮助用户选择合适的处理方法。 工具部分,可以展示如何封装常用方法,比如复制文件、删除目录等,或者推荐使用现有的库如Apache Commons IO,但需要注明,避免依赖第三方库的问题。 最后,生成相关问题,需要围绕文件操作展开,比如性能优化、异常处理、NIO的特性、第三方库的使用等。确保问题与内容相关,帮助用户深入理解。 需要检查所有代码示例是否正确,语法是否准确,比如文件路径是否正确,异常处理是否完善。同时,确保引用标识正确添加,比如在提到java.io包时引用[^1],工具部分引用[^2],读写示例引用[^3]。 可能还需要注意中文表达,避免专业术语翻译错误,比如“缓冲流”正确无误。此外,避免使用Markdown格式,但用户允许在回答中使用代码块,所以没问题。 最后,确保回答结构符合用户的要求:分章节,代码示例,相关问题和引用。整个过程需要逻辑清晰,覆盖用户的需求,同时提供实用的示例和深入的问题引导。</think>### Java文件操作方法及示例 #### 一、基础文件操作 1. **创建文件** - 使用`File`: ```java File file = new File("test.txt"); boolean created = file.createNewFile(); // 返回是否创建成功 ``` - 使用`Files`(NIO): ```java Path path = Paths.get("test.txt"); Files.createFile(path); // 需处理IOException ``` 2. **删除文件** ```java File file = new File("test.txt"); boolean deleted = file.delete(); // 永久删除,不可恢复 ``` #### 二、文件读写操作 1. **字节流读写(适合非文本文件)** ```java // 写入文件 try (FileOutputStream fos = new FileOutputStream("data.bin")) { fos.write("Hello".getBytes()); } // 读取文件 try (FileInputStream fis = new FileInputStream("data.bin")) { int byteData; while ((byteData = fis.read()) != -1) { System.out.print((char)byteData); } } ``` 2. **字符流读写(适合文本文件)** ```java // 使用BufferedWriter提升效率 try (BufferedWriter writer = new BufferedWriter(new FileWriter("text.txt"))) { writer.write("Java文件操作示例"); } // 使用BufferedReader逐行读取 try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } ``` #### 三、文件复制与工具 1. **手动实现文件复制** ```java try (InputStream is = new FileInputStream("source.txt"); OutputStream os = new FileOutputStream("target.txt")) { byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } } ``` 2. **使用`Files`工具Java 7+)** ```java Path source = Paths.get("source.txt"); Path target = Paths.get("target.txt"); Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); ``` 3. **常用工具封装示例** ```java public class FileUtils { // 复制文件夹(递归实现) public static void copyDirectory(File source, File target) throws IOException { if (source.isDirectory()) { if (!target.exists()) target.mkdir(); for (String file : source.list()) { copyDirectory(new File(source, file), new File(target, file)); } } else { Files.copy(source.toPath(), target.toPath()); } } } ``` #### 四、特殊场景处理 1. **大文件读取优化** ```java try (BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream("large.log"), StandardCharsets.UTF_8))) { reader.lines().forEach(System.out::println); // 使用流式处理 } ``` 2. **临时文件创建** ```java Path tempFile = Files.createTempFile("prefix_", ".tmp"); // 自动生成唯一文件名 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值