zoukankan      html  css  js  c++  java
  • 在Java当中如何优雅地处理临时文件

    创建临时文件

    在java中创建临时文件有许多场景,但是大多数是在单元测试或者是对上传的文件进行内容处理。当测试用例或者文件处理完成后,你并不关心文件是否还存在。况且持续累积的无效文件无疑会浪费许多磁盘空间。

    通过使用java.io.File.createTempFile()创建临时文件

    public class TemporaryFileExample
    {
       public static void main(String[] args)
       {
          File temp;
          try
          {
             temp = File.createTempFile("myTempFile", ".txt");
              
             System.out.println("Temp file created : " + temp.getAbsolutePath());
          } catch (IOException e)
          {
             e.printStackTrace();
          }
       }
    }

    windows系统中的输出: C:UsersadminAppDataLocalTempmyTempFile7295261447112135643.txt

    通过使用NIO创建临时文件

    public class TemporaryFileExample
    {
       public static void main(String[] args)
       {
          try
          {
             final Path path = Files.createTempFile("myTempFile", ".txt");
             System.out.println("Temp file : " + path);
    
              
          } catch (IOException e)
          {
             e.printStackTrace();
          }
       }
    }

    windows系统中的输出: C:UsersadminAppDataLocalTempmyTempFile3492283537103788196.txt

    写入临时文件

    比如在文件上传的时候,我们就可以将字节流写入临时文件当中。

    使用java.io.BufferedWriter写入临时文件

    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class TemporaryFileExample
    {
       public static void main(String[] args)
       {
          File temp;
          try
          {
             temp = File.createTempFile("myTempFile", ".txt");
     
             BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
             bw.write("This is the temporary data written to temp file");
             bw.close();
     
             System.out.println("Written to Temp file : " + temp.getAbsolutePath());
          } catch (IOException e)
          {
             e.printStackTrace();
          }
       }
    }

    使用NIO写入临时文件

    如果你要使用java NIO库,你就可以使用Files.write()方法

    public class TemporaryFileExample
    {
       public static void main(String[] args)
       {
          try
          {
             final Path path = Files.createTempFile("myTempFile", ".txt");
             System.out.println("Temp file : " + path);
     
     
             byte[] buf = "some data".getBytes();
             Files.write(path, buf);
     
          } catch (IOException e)
          {
             e.printStackTrace();
          }
       }
    }

    删除临时文件

    删除临时文件是非常重要的一步,因为你不想让你的磁盘空间爆炸。
    为了当在应用exit时(jvm终止)删除文件,你可以使用:

    File temp = File.createTempFile("myTempFile", ".txt");
    temp.deleteOnExit();

    或者如果你想要立马删除文件,你可以直接使用delete()方法

    File temp = File.createTempFile("myTempFile", ".txt");
    temp.delete();

    使用IO删除临时文件

    import java.io.File;
    import java.io.IOException;
     
    public class TemporaryFileExample
    {
       public static void main(String[] args)
       {
          File temp;
          try
          {
             temp = File.createTempFile("myTempFile", ".txt");
              
             System.out.println("Temp file created : " + temp.getAbsolutePath());
              
             //temp.delete(); //立即删除
              
             temp.deleteOnExit(); //运行结束时删除
              
             System.out.println("Temp file exists : " + temp.exists());
          } catch (IOException e)
          {
             e.printStackTrace();
          }
       }
    }

    使用NIO删除临时文件

    public class TemporaryFileExample
    {
       public static void main(String[] args)
       {
          try
          {
             final Path path = Files.createTempFile("myTempFile", ".txt");
             System.out.println("Temp file : " + path);
     
            // Files.delete(path);  //立即删除文件
            
            Files.deleteIfExists(path);
              
             
              
          } catch (IOException e)
          {
             e.printStackTrace();
          }
       }
    }

    但是在进行删除和创建文件的时候我使用的是hutool工具类中的fileUtil这个工具类

    ls 列出目录和文件
    touch 创建文件,如果父目录不存在也自动创建
    mkdir 创建目录,会递归创建每层目录
    del 删除文件或目录(递归删除,不判断是否为空),这个方法相当于Linux的delete命令
    copy 拷贝文件或目录
    需要注意的是,del方法会删除目录而不判断其是否为空,这一方面方便了使用,另一方面也可能造成一些预想不到的后果(比如拼写错路径而删除不应该删除的目录),所以请谨慎使用此方法。
  • 相关阅读:
    查看python关键字
    命令终端执行python
    Codeforces-462C. A Twisty Movement
    Codeforces-462A. A Compatible Pair
    Codeforces-446C. Pride
    Codeforces-Hello 2018C. Party Lemonade(贪心)
    Codeforces-33C. Wonderful Randomized Sum
    Codeforces-118D. Caesar's Legions(lazy dynamics)
    codeforces-73C. LionAge II
    Gym 101510C-Computer Science
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/12405379.html
Copyright © 2011-2022 走看看