test/java/nio/file/Files/DeleteOnClose.java

Print this page




  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 import java.nio.file.*;
  25 import static java.nio.file.StandardOpenOption.*;
  26 import java.io.*;
  27 import java.util.*;
  28 
  29 public class DeleteOnClose {
  30 
  31     public static void main(String[] args) throws IOException {
  32         // open file but do not close it. Its existance will be checked by
  33         // the calling script.
  34         Paths.get(args[0]).newByteChannel(READ, WRITE, DELETE_ON_CLOSE);
  35 
  36         // check temporary file has been deleted after closing it
  37         Path file = File.createTempFile("blah", "tmp").toPath();
  38         file.newByteChannel(READ, WRITE, DELETE_ON_CLOSE).close();
  39         if (file.exists())
  40             throw new RuntimeException("Temporary file was not deleted");
  41 
  42         Path dir = TestUtil.createTemporaryDirectory();
  43         try {
  44             // check that DELETE_ON_CLOSE fails when file is a sym link
  45             if (TestUtil.supportsLinks(dir)) {
  46                 file = dir.resolve("foo").createFile();
  47                 Path link = dir.resolve("link").createSymbolicLink(file);


  48                 try {
  49                     link.newByteChannel(READ, WRITE, DELETE_ON_CLOSE);
  50                     throw new RuntimeException("IOException expected");
  51                 } catch (IOException ignore) { }
  52             }
  53 
  54             // check that DELETE_ON_CLOSE works with files created via open
  55             // directories
  56             DirectoryStream stream = dir.newDirectoryStream();
  57             try {
  58                 if (stream instanceof SecureDirectoryStream) {
  59                     SecureDirectoryStream secure = (SecureDirectoryStream)stream;
  60                     file = Paths.get("foo");
  61 
  62                     Set<OpenOption> opts = new HashSet<OpenOption>();
  63                     opts.add(WRITE);
  64                     opts.add(DELETE_ON_CLOSE);
  65                     secure.newByteChannel(file, opts).close();
  66 
  67                     if (dir.resolve(file).exists())
  68                         throw new RuntimeException("File not deleted");
  69                 }
  70             } finally {
  71                 stream.close();
  72             }
  73         } finally {
  74             TestUtil.removeAll(dir);
  75         }
  76     }
  77 }


  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 import java.nio.file.*;
  25 import static java.nio.file.StandardOpenOption.*;
  26 import java.io.*;
  27 import java.util.*;
  28 
  29 public class DeleteOnClose {
  30 
  31     public static void main(String[] args) throws IOException {
  32         // open file but do not close it. Its existance will be checked by
  33         // the calling script.
  34         Files.newByteChannel(Paths.get(args[0]), READ, WRITE, DELETE_ON_CLOSE);
  35 
  36         // check temporary file has been deleted after closing it
  37         Path file = Files.createTempFile("blah", "tmp");
  38         Files.newByteChannel(file, READ, WRITE, DELETE_ON_CLOSE).close();
  39         if (Files.exists(file))
  40             throw new RuntimeException("Temporary file was not deleted");
  41 
  42         Path dir = Files.createTempDirectory("blah");
  43         try {
  44             // check that DELETE_ON_CLOSE fails when file is a sym link
  45             if (TestUtil.supportsLinks(dir)) {
  46                 file = dir.resolve("foo");
  47                 Files.createFile(file);
  48                 Path link = dir.resolve("link");
  49                 Files.createSymbolicLink(link, file);
  50                 try {
  51                     Files.newByteChannel(link, READ, WRITE, DELETE_ON_CLOSE);
  52                     throw new RuntimeException("IOException expected");
  53                 } catch (IOException ignore) { }
  54             }
  55 
  56             // check that DELETE_ON_CLOSE works with files created via open
  57             // directories
  58             try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {

  59                 if (stream instanceof SecureDirectoryStream) {
  60                     SecureDirectoryStream<Path> secure = (SecureDirectoryStream<Path>)stream;
  61                     file = Paths.get("foo");
  62 
  63                     Set<OpenOption> opts = new HashSet<>();
  64                     opts.add(WRITE);
  65                     opts.add(DELETE_ON_CLOSE);
  66                     secure.newByteChannel(file, opts).close();
  67 
  68                     if (Files.exists(dir.resolve(file)))
  69                         throw new RuntimeException("File not deleted");
  70                 }


  71             }
  72         } finally {
  73             TestUtil.removeAll(dir);
  74         }
  75     }
  76 }