首页 > 编程语言 >Java IO教程 - Java文件操作

Java IO教程 - Java文件操作

时间:2023-11-06 15:26:29浏览次数:38  
标签:文件 教程 Java IO file File println new newFile

文件创建

我们可以使用File类的createNewFile()方法创建一个新文件:

File dummyFile = new File("test.txt");
boolean fileCreated  = dummyFile.createNewFile();

该createNewFile()方法创建一个新的空文件,如果有指定名称的文件不存在。

如果文件已成功创建,则返回true;否则,返回false。如果发生I/O错误,该方法将抛出IOException。

我们还可以在默认的临时文件目录或目录中创建一个临时文件。要在默认临时目录中创建临时文件,请使用File类的createTempFile()静态方法,该方法接受前缀和后缀以生成临时文件名。

File  tempFile = File.createTempFile("abc", ".txt");
 

文件夹创建

我们可以使用mkdir()或mkdirs()方法创建一个新目录。

仅当路径名中指定的父目录已存在时,mkdir()方法才创建目录。

File newDir  = new File("C:\\users\\home");

只有当C:\users目录已经存在时,newDir.mkdir()方法才会创建主目录。

newDir.mkdirs()方法将创建users目录(如果它不存在于C:驱动器中),它将在C:\users目录下创建主目录。

文件删除

我们需要使用File类的delete()方法来删除文件/目录。

目录必须为空,我们才能删除它。

如果文件/目录被删除,该方法返回true; 否则,返回false。

我们还可以延迟删除文件,直到JVM通过使用deleteOnExit()方法终止。

如果我们在程序中创建临时文件,当程序退出时要删除,这将非常有用。

立即删除dummy.txt文件

File dummyFile = new File("dummy.txt"); 
dummyFile.delete();

在JVM终止时删除dummy.txt文件

File dummyFile = new File("dummy.txt"); 
dummyFile.deleteOnExit();
 

文件重命名

要重命名文件,我们可以使用renameTo()方法,它使用一个File对象来表示新文件:

boolean fileRenamed = oldFile.renameTo(newFile);

完整的源代码

import java.io.File;

public class Main {
  public static void main(String[] argv) {
    // Rename old-dummy.txt to new_dummy.txt
    File oldFile = new File("old_dummy.txt");
    File newFile = new File("new_dummy.txt");

    boolean fileRenamed = oldFile.renameTo(newFile);
    if (fileRenamed) {
      System.out.println(oldFile + "  renamed  to " + newFile);
    } else {
      System.out.println("Renaming " + oldFile + "  to " + newFile
          + "  failed.");
    }

  }
}

如果文件的重命名成功,renameTo()方法返回true;否则,返回false。

我们需要检查返回值,以确保重命名成功。

上面的代码生成以下结果。

例子

File对象是不可变的。创建后,它始终表示相同的路径名。当我们重命名文件时,旧的File对象仍然代表原始的路径名。

File对象表示路径名,而不是文件系统中的实际文件。

以下代码显示了如何进行文件创建,删除和重命名。

import java.io.File;

public class Main {
  public static void main(String[] args) throws Exception {
    File newFile = new File("my_new_file.txt");
    printFileDetails(newFile);

    // Create a new file
    boolean fileCreated = newFile.createNewFile();
    if (!fileCreated) {
      System.out.println(newFile + "  could   not  be  created.");
    }
    printFileDetails(newFile);

    // Delete the new file
    newFile.delete();

    System.out.println("After deleting the new file:");
    printFileDetails(newFile);

    // recreate the file
    newFile.createNewFile();

    printFileDetails(newFile);

    // Let"s tell the JVM to delete this file on exit
    newFile.deleteOnExit();

    System.out.println("After  using deleteOnExit() method:");
    printFileDetails(newFile);

    // Create a new file and rename it
    File firstFile = new File("my_first_file.txt");
    File secondFile = new File("my_second_file.txt");

    fileCreated = firstFile.createNewFile();
    if (fileCreated || firstFile.exists()) {
      printFileDetails(firstFile);
      printFileDetails(secondFile);

      boolean renamedFlag = firstFile.renameTo(secondFile);
      if (!renamedFlag) {
        System.out.println("Could not  rename  " + firstFile);
      }
      printFileDetails(firstFile);
      printFileDetails(secondFile);
    }
  }
  public static void printFileDetails(File f) {
    System.out.println("Absolute Path: " + f.getAbsoluteFile());
    System.out.println("File exists:  " + f.exists());
  }
}

上面的代码生成以下结果。

文件属性

File类包含让我们获取/设置文件和目录的属性的方法。

我们可以设置分别使用setReadOnly(),setReadable(),setWritable()和setExecutable()方法将文件设置为只读,可读,可写和可执行。

我们可以使用lastModified()和setLastModified()方法来获取和设置文件的最后修改日期和时间。

我们可以使用isHidden()方法检查文件是否被隐藏。

文件大小

我们可以使用File类的length()方法获取文件的大小(以字节为单位)。

File myFile  = new File("myfile.txt");
long  fileLength = myFile.length();

如果File对象表示不存在的文件,则length()方法返回零。

length()方法的返回类型是long,而不是int。

列出文件和目录

我们可以使用File类的listRoots()静态方法获取文件系统中可用根目录的列表。 它返回一个File对象数组。

File[] roots = File.listRoots();

以下代码显示如何列出所有可用的根目录。

import java.io.File;

public class Main {
  public static void main(String[] args) {
    File[] roots = File.listRoots();
    System.out.println("List  of  root directories:");
    for (File f : roots) {
      System.out.println(f.getPath());
    }
  }
}

我们可以使用File类的list()或listFiles()方法列出目录中的所有文件和目录。

list()方法返回一个String数组,而listFiles()方法返回一个File数组。

我们还可以使用这些方法的文件过滤器从返回的结果中排除一些文件和目录。

以下代码显示如何列出目录中的所有文件和目录。

import java.io.File;

public class Main {
  public static void main(String[] args) {
    // Change the dirPath value to list files from your directory
    String dirPath = "C:\\";

    File dir = new File(dirPath);
    File[] list = dir.listFiles();

    for (File f : list) {
      if (f.isFile()) {
        System.out.println(f.getPath() + "  (File)");
      } else if (f.isDirectory()) {
        System.out.println(f.getPath() + "  (Directory)");
      }
    }
  }
}

上面的代码生成以下结果。

文件过滤器

要从列表中排除扩展名为.SYS的所有文件,我们可以使用由功能接口FileFilter的实例表示的文件过滤器来实现。

它包含一个accept()方法,它将File作为参数列出,如果应该列出文件,则返回true。返回false不会列出文件。

以下代码创建一个文件过滤器,将过滤扩展名为.SYS的文件。

FileFilter filter = file ->  {
    if (file.isFile()) {
        String fileName   = file.getName().toLowerCase();
        if (fileName.endsWith(".sys"))  {
            return false;
        }
    }
    return true;
};

以下代码创建两个文件过滤器 - 一个仅过滤文件,另一个仅过滤目录:

// Filters only  files
FileFilter fileOnlyFilter = File::isFile;

// Filters only  directories
FileFilter  dirOnlyFilter = File::isDirectory;

以下代码显示如何使用FileFilter过滤文件。

import java.io.File;
import java.io.FileFilter;

public class Main {
  public static void main(String[] args) {
    String dirPath = "C:\\";
    File dir = new File(dirPath);

    // Create a file filter to exclude any .SYS file
    FileFilter filter = file -> {
      if (file.isFile()) {
        String fileName = file.getName().toLowerCase();
        if (fileName.endsWith(".sys")) {
          return false;
        }
      }
      return true;
    };

    File[] list = dir.listFiles(filter);

    for (File f : list) {
      if (f.isFile()) {
        System.out.println(f.getPath() + "  (File)");
      } else if (f.isDirectory()) {
        System.out.println(f.getPath() + "  (Directory)");
      }
    }
  }
}

上面的代码生成以下结果。

标签:文件,教程,Java,IO,file,File,println,new,newFile
From: https://www.cnblogs.com/dlx609/p/17812766.html

相关文章

  • Java IO教程- Java文件
    创建文件我们可以从中创建一个 File 对象路径名父路径名和子路径名URI(统一资源标识符)我们可以使用File类的以下构造函数之一创建一个文件:File(Stringpathname)File(Fileparent,Stringchild)File(Stringparent,Stringchild)File(URIuri)如果我们有一个文件路......
  • 使用uniapp开发小程序getLocation报错
    uniapp中使用uni.getLocation()报错,报错如下:getLocation:failtheapineedtobedeclaredintherequiredPrivateInfosfieldinapp.json/ext.json 首先检查uniapp的manifest文件发现位置权限已经开启: 后翻阅微信文档后发现原来是微信官方做了调整,uniapp只勾选这个还......
  • 漏扫 X-Content-Type-Options X-XSS-Protection Strict-Transport-Security X-Fram
    web应用nginx部署未设置头部,导致可能出现安全问题【未设置X-Content-Type-Options响应头】【未设置X-XSS-Protection响应头】【未设置Strict-Transport-Security响应头】【X-Frame-Options头未设置】 Content-Type(内容类型),一般是指网页中存在的Content-Type,用于定义网络文......
  • Linkless Link Prediction via Relational Distillation
    目录概符号说明LLP代码GuoZ.,ShiaoW.,ZhangS.,LiuY.,ChawlaN.V.,ShahN.andZhaoT.Linklesslinkpredictionviarelationaldistillation.ICML,2023.概从GNN教师模型蒸馏到MLP学生模型.符号说明\(G=(\mathcal{V,E})\),无向图;\(\mathbf{A}\in......
  • How to search for ? (question mark) in Excel
    The?isawildcardwhichrepresentsasinglecharacter,andthe*isawildcardcharacterthatrepresentsanystringofcharacters.Whensearchingforeitherwildcardcharacter,Excelwillsimplyfindeverything,whetherornottheseactualcharactersapp......
  • How to resize slide dimensions without resizing any objects on the slide?
    IFyouarecompetenttounzipthepptxfileandmodifytheXMLitcanbedone,theslidesizewillchangebutthepictureswillnotchange(theywillmovethoughandyouwillhavetoadjustthepositions)Unzip>lookforPPT>presentationXMLandc......
  • node.js快死了!Bun 1.0 正在改变 JavaScript 游戏规则
    在进一步讨论之前,我们需要解释什么是javascript运行时以及为什么我们应该关心它的速度。 想象一下,你用JavaScript写了一个故事,你需要有人大声朗读。JavaScript运行时就像那个友好的叙述者,让你的故事栩栩如生!这是一个特殊的环境,你的JavaScript故事被阅读和表演出来。但是,让我......
  • mac m1上java调用opencv
    mac1openjdk17官网上没有编译好的macm1上二进制库.需要自己下载源代码编译.https://opencv.org/releases/从这里下载源代码.如opencv-4.7.0.zip解压把opencv-4.7.0文件夹重命名为opencv在opencv同级目录下建一个文件夹build_opencvcd到build_opencv,然后执行cmake-DBU......
  • 无涯教程-批处理 - ECHO函数
    ECHO-ECHO此批处理命令显示消息,或打开或关闭命令回显。ECHO-语法ECHO“string”ECHO-示例以下示例显示了dir命令的不同变体。RemTurnstheechoonsothateachcommandwillbeshownasexecutedechoonecho"HelloWorld"RemTurnstheechooffsotha......
  • RStudio中,出现中文乱码问题的解决方案(修改文件编码)
    RStudio中,出现中文乱码问题的解决方案解决步骤:1、设置RStudio文本显示的默认编码:RStudio菜单栏的Tools->GlobalOptions2、选择General->DefaultTextEncoding,点击Change:3、在弹出的编码中,选择UTF-8编码。4、点击OK,然后再点击OK,保存设置。5、最后,在打开文件的时候,选择File->......