<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
    http://joust.kano.net/weblog/archives/000071.html

    Code to safely delete a directory containing symbolic links

    Today I had to write code to delete a directory, which, in Java, requires individually deleting all of the files in it as well as its subdirectories and their subdirectories and so on.

    It's easy to recursively delete things, but if your code is going to run on a system with symbolic links (Linux, Unix, OSX (?)) you need to be careful. The code I came up with is below:
    (This code is released in the public domain. Feel free to use it in your own project.)
    
    public static boolean deleteDir(File dir) {
    // to see if this directory is actually a symbolic link to a directory,
    // we want to get its canonical path - that is, we follow the link to
    // the file it's actually linked to
    File candir;
    try {
    candir = dir.getCanonicalFile();
    } catch (IOException e) {
    return false;
    }
    // a symbolic link has a different canonical path than its actual path,
    // unless it's a link to itself
    if (!candir.equals(dir.getAbsoluteFile())) {
    // this file is a symbolic link, and there's no reason for us to
    // follow it, because then we might be deleting something outside of
    // the directory we were told to delete
    return false;
    }
    // now we go through all of the files and subdirectories in the
    // directory and delete them one by one
    File[] files = candir.listFiles();
    if (files != null) {
    for (int i = 0; i < files.length; i++) {
    File file = files[i];
    // in case this directory is actually a symbolic link, or it's
    // empty, we want to try to delete the link before we try
    // anything
    boolean deleted = file.delete();
    if (!deleted) {
    // deleting the file failed, so maybe it's a non-empty
    // directory
    if (file.isDirectory()) deleteDir(file);
    // otherwise, there's nothing else we can do
    }
    }
    }
    // now that we tried to clear the directory out, we can try to delete it
    // again
    return dir.delete();
    }
    
    Posted by keith at February 5, 2004 12:08 AM | TrackBack



    ===================================

    http://www.eddie-meyer.com/docs/notes/delete-symbolic-link-from-java.html

    Deleting a symbolic link

    Given a symbolic link of

    	fileA -> fileB
    

    what happens if you try to call file.delete() (the Java 'delete' command) on fileA?

    To test what happens, I wrote a test program using Java1.4 on Sun Solaris 8.

    Here is the program...

    /* Program to test what happens if you try to delete a symbolic
    * link from java (running on Solaris)
    *
    * Command line arguments:
    * 		filename - the symbolic link to delete. (target can be a file or a directory.)
    */
    import java.io.*;
    public class delete
    {
    public static void main(String args[])
    {
    if ( args.length <= 0 )
    {
    System.out.println("You didn't specify the symbolic link to delete.");
    System.out.println("Exiting...");
    System.exit(1);
    }
    String link_name = args[0];
    System.out.println("Input Details...");
    System.out.println("Symbolic Link: "+link_name);
    System.out.println("");
    delete d = new delete(link_name);
    }
    /**
    * Constructor
    */
    public delete(String link_name)
    {
    if ( ! exists( link_name ) )
    {
    System.out.println( link_name + " does not exist.");
    System.out.println("Exiting...");
    System.exit(1);
    }
    if ( ! isSymbolicLink( link_name ) )
    {
    System.out.println( link_name + " is not a symbolic link.");
    System.out.println("Exiting...");
    System.exit(1);
    }
    if ( delete(link_name) )
    {
    System.out.println("Java's File.delete() returned OK.");
    }
    else
    {
    System.out.println("Java's File.delete() did NOT work OK.");
    }
    }
    private boolean exists(String link_name)
    {
    File f = new File( link_name );
    return f.exists();
    }
    private boolean isSymbolicLink(String link_name)
    {
    try
    {
    File f = new File( link_name );
    if ( ! f.getAbsolutePath().equals( f.getCanonicalPath() ) )
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    catch(IOException e)
    {
    System.out.println("Exception occurred while trying to determine if " + link_name + "is a symbolic link.");
    System.out.println("Can't continue, exiting...");
    System.exit(1);
    return false;
    }
    }
    private boolean delete(String link_name)
    {
    File f = new File(link_name);
    return f.delete();
    }
    } // end of class.
    

    The result of my tests were that the symbolic link gets removed (whether the symbolic link points to a file or a directory) but the target object was left untouched.

    Note: In the above code, I attempted to identify a symbolic link by comparing the file's absolute path to it's canonical path (see the 'isSymbolicLink(...)' method above). This was the method I had seen suggested several times on the web. Since implementing this method, however, I have determined that it is NOT reliable enough and I am not all that happy with it... (see the following thread in the Java secion of the forums area).

    posted on 2007-04-17 14:36 jinfeng_wang 閱讀(521) 評論(0)  編輯  收藏 所屬分類: javaZZ
    主站蜘蛛池模板: 丰满妇女做a级毛片免费观看| 久久亚洲国产视频| 亚洲AV无码久久久久网站蜜桃| 亚洲美女自拍视频| 无码A级毛片免费视频内谢| 亚洲一区二区三区无码中文字幕| 日本黄页网址在线看免费不卡 | a级毛片免费高清毛片视频| 亚洲一区二区精品视频| 亚洲丁香色婷婷综合欲色啪| 久久国产精品免费观看| 日本免费的一级v一片| 亚洲午夜国产精品无码老牛影视| 一级毛片a女人刺激视频免费| 亚洲男人在线无码视频| 中国一级特黄高清免费的大片中国一级黄色片 | 日韩国产欧美亚洲v片 | 91成人在线免费观看| 亚洲啪啪免费视频| 免费大片av手机看片| 伊人久久亚洲综合| 亚洲AV无码之国产精品| 亚洲av无码国产精品色在线看不卡 | 最新欧洲大片免费在线| 亚洲精品无码永久中文字幕| 一个人免费视频观看在线www| 亚洲国产一区二区三区青草影视| 青娱乐在线视频免费观看| 中文字幕不卡亚洲 | 亚洲av无码国产综合专区| 性做久久久久免费观看| 免费人成大片在线观看播放电影| 亚洲精品无码专区在线在线播放| 亚洲成人免费网站| 免费无码又爽又黄又刺激网站| 国产亚洲福利精品一区| 嫩草影院免费观看| 中文字幕成人免费高清在线 | 无码天堂亚洲国产AV| 免费大片黄在线观看yw| 亚洲高清在线mv|