File类

1 篇文章 0 订阅

File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。

值得指出的是,不管是文件还是目录都是通过File类来操作的,File能够新建、删除、重命名文件和目录。

但是File类本身不能访问文件内容,如果需要访问文件内容需要使用输入输出流。

getPath
public String getPath()将此抽象路径名转换为一个路径名字符串。所得到的字符串使用默认名称分隔符来分隔名称序列中的名称。 
返回:
此抽象路径名的字符串形式
getAbsolutePath
public String getAbsolutePath()返回抽象路径名的绝对路径名字符串。 
如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样。如果此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性 user.dir 指定。否则,使用与系统有关的方式分析此路径名。在 UNIX 系统上,通过根据当前用户目录分析某一相对路径名,可使该路径名成为绝对路径名。在 Microsoft Windows 系统上,通过由路径名指定的当前驱动器目录(如果有)来分析某一相对路径名,可使该路径名成为绝对路径名;否则,可以根据当前用户目录来分析它。 
返回:
绝对路径名字符串,它与此抽象路径名表示相同的文件或目录的 
抛出: 
SecurityException - 如果无法访问所需的系统属性值。
另请参见:
isAbsolute()

 

 

什么叫当前驱动器,还有就是某个驱动器的当前路径?

默认正在操作的硬盘或其他存储设备分区叫当前驱动器。比如你打开了D盘的文件夹,D盘就是当前驱动器。文件在硬盘(U盘、光盘……)等的具体位置,是用一层层名称表示,从驱动器开始,如D盘下有文件夹ABC,ABC里面有A1、B1等文件夹,则D:\ABC\A1和D:\ABC\B1分别表示指向这两个文件夹的路径。就像找人说“山东\青岛\市南区\香港中路\15号\1单元\201\张三”一样,所以又被称为地址。
查看方式是:在打开窗口(资源管理器)的地址栏单击空白位置,可以显示当前路径。
此外,在CMD命令窗口中提示符默认显示当前路径。

package java.io;

import java.security.AccessController;
import java.util.Locale;
import sun.security.action.GetPropertyAction;

class Win32FileSystem
  extends FileSystem
{
  private final char slash;
  private final char altSlash;
  private final char semicolon;
  private static String[] driveDirCache;
  
  public Win32FileSystem()
  {
    this.slash = ((String)AccessController.doPrivileged(new GetPropertyAction("file.separator"))).charAt(0);
    
    this.semicolon = ((String)AccessController.doPrivileged(new GetPropertyAction("path.separator"))).charAt(0);
    
    this.altSlash = (this.slash == '\\' ? '/' : '\\');
  }
  
  private boolean isSlash(char paramChar)
  {
    return (paramChar == '\\') || (paramChar == '/');
  }
  
  private boolean isLetter(char paramChar)
  {
    return ((paramChar >= 'a') && (paramChar <= 'z')) || ((paramChar >= 'A') && (paramChar <= 'Z'));
  }
  
  private String slashify(String paramString)
  {
    if ((paramString.length() > 0) && (paramString.charAt(0) != this.slash)) {
      return this.slash + paramString;
    }
    return paramString;
  }
  
  public char getSeparator()
  {
    return this.slash;
  }
  
  public char getPathSeparator()
  {
    return this.semicolon;
  }
  
  private int normalizePrefix(String paramString, int paramInt, StringBuffer paramStringBuffer)
  {
    int i = 0;
    while ((i < paramInt) && (isSlash(paramString.charAt(i)))) {
      i++;
    }
    char c;
    if ((paramInt - i >= 2) && (isLetter(c = paramString.charAt(i))) && (paramString.charAt(i + 1) == ':'))
    {
      paramStringBuffer.append(c);
      paramStringBuffer.append(':');
      i += 2;
    }
    else
    {
      i = 0;
      if ((paramInt >= 2) && (isSlash(paramString.charAt(0))) && (isSlash(paramString.charAt(1))))
      {
        i = 1;
        paramStringBuffer.append(this.slash);
      }
    }
    return i;
  }
  
  private String normalize(String paramString, int paramInt1, int paramInt2)
  {
    if (paramInt1 == 0) {
      return paramString;
    }
    if (paramInt2 < 3) {
      paramInt2 = 0;
    }
    char c1 = this.slash;
    StringBuffer localStringBuffer = new StringBuffer(paramInt1);
    int i;
    if (paramInt2 == 0)
    {
      i = normalizePrefix(paramString, paramInt1, localStringBuffer);
    }
    else
    {
      i = paramInt2;
      localStringBuffer.append(paramString.substring(0, paramInt2));
    }
    while (i < paramInt1)
    {
      char c2 = paramString.charAt(i++);
      if (isSlash(c2))
      {
        while ((i < paramInt1) && (isSlash(paramString.charAt(i)))) {
          i++;
        }
        if (i == paramInt1)
        {
          int j = localStringBuffer.length();
          if ((j == 2) && (localStringBuffer.charAt(1) == ':'))
          {
            localStringBuffer.append(c1);
            break;
          }
          if (j == 0)
          {
            localStringBuffer.append(c1);
            break;
          }
          if ((j != 1) || (!isSlash(localStringBuffer.charAt(0)))) {
            break;
          }
          localStringBuffer.append(c1);
          break;
        }
        localStringBuffer.append(c1);
      }
      else
      {
        localStringBuffer.append(c2);
      }
    }
    String str = localStringBuffer.toString();
    return str;
  }
  
  public String normalize(String paramString)
  {
    int i = paramString.length();
    int j = this.slash;
    int k = this.altSlash;
    int m = 0;
    for (int n = 0; n < i; n++)
    {
      int i1 = paramString.charAt(n);
      if (i1 == k) {
        return normalize(paramString, i, m == j ? n - 1 : n);
      }
      if ((i1 == j) && (m == j) && (n > 1)) {
        return normalize(paramString, i, n - 1);
      }
      if ((i1 == 58) && (n > 1)) {
        return normalize(paramString, i, 0);
      }
      m = i1;
    }
    if (m == j) {
      return normalize(paramString, i, i - 1);
    }
    return paramString;
  }
  
  public int prefixLength(String paramString)
  {
    int i = this.slash;
    int j = paramString.length();
    if (j == 0) {
      return 0;
    }
    char c = paramString.charAt(0);
    int k = j > 1 ? paramString.charAt(1) : 0;
    if (c == i)
    {
      if (k == i) {
        return 2;
      }
      return 1;
    }
    if ((isLetter(c)) && (k == 58))
    {
      if ((j > 2) && (paramString.charAt(2) == i)) {
        return 3;
      }
      return 2;
    }
    return 0;
  }
  
  public String resolve(String paramString1, String paramString2)
  {
    int i = paramString1.length();
    if (i == 0) {
      return paramString2;
    }
    int j = paramString2.length();
    if (j == 0) {
      return paramString1;
    }
    String str = paramString2;
    int k = 0;
    int m = i;
    if ((j > 1) && (str.charAt(0) == this.slash))
    {
      if (str.charAt(1) == this.slash) {
        k = 2;
      } else {
        k = 1;
      }
      if (j == k)
      {
        if (paramString1.charAt(i - 1) == this.slash) {
          return paramString1.substring(0, i - 1);
        }
        return paramString1;
      }
    }
    if (paramString1.charAt(i - 1) == this.slash) {
      m--;
    }
    int n = m + j - k;
    char[] arrayOfChar = null;
    if (paramString2.charAt(k) == this.slash)
    {
      arrayOfChar = new char[n];
      paramString1.getChars(0, m, arrayOfChar, 0);
      paramString2.getChars(k, j, arrayOfChar, m);
    }
    else
    {
      arrayOfChar = new char[n + 1];
      paramString1.getChars(0, m, arrayOfChar, 0);
      arrayOfChar[m] = this.slash;
      paramString2.getChars(k, j, arrayOfChar, m + 1);
    }
    return new String(arrayOfChar);
  }
  
  public String getDefaultParent()
  {
    return "" + this.slash;
  }
  
  public String fromURIPath(String paramString)
  {
    String str = paramString;
    if ((str.length() > 2) && (str.charAt(2) == ':'))
    {
      str = str.substring(1);
      if ((str.length() > 3) && (str.endsWith("/"))) {
        str = str.substring(0, str.length() - 1);
      }
    }
    else if ((str.length() > 1) && (str.endsWith("/")))
    {
      str = str.substring(0, str.length() - 1);
    }
    return str;
  }
  
  public boolean isAbsolute(File paramFile)
  {
    int i = paramFile.getPrefixLength();
    return ((i == 2) && (paramFile.getPath().charAt(0) == this.slash)) || (i == 3);
  }
  
  protected native String getDriveDirectory(int paramInt);
  
  private static int driveIndex(char paramChar)
  {
    if ((paramChar >= 'a') && (paramChar <= 'z')) {
      return paramChar - 'a';
    }
    if ((paramChar >= 'A') && (paramChar <= 'Z')) {
      return paramChar - 'A';
    }
    return -1;
  }
  
  private String getDriveDirectory(char paramChar)
  {
    int i = driveIndex(paramChar);
    if (i < 0) {
      return null;
    }
    String str = driveDirCache[i];
    if (str != null) {
      return str;
    }
    str = getDriveDirectory(i + 1);
    driveDirCache[i] = str;
    return str;
  }
  
  private String getUserPath()
  {
    return normalize(System.getProperty("user.dir"));
  }
  
  private String getDrive(String paramString)
  {
    int i = prefixLength(paramString);
    return i == 3 ? paramString.substring(0, 2) : null;
  }
  
  public String resolve(File paramFile)
  {
    String str1 = paramFile.getPath();
    int i = paramFile.getPrefixLength();
    if ((i == 2) && (str1.charAt(0) == this.slash)) {
      return str1;
    }
    if (i == 3) {
      return str1;
    }
    if (i == 0) {
      return getUserPath() + slashify(str1);
    }
    String str2;
    String str3;
    if (i == 1)
    {
      str2 = getUserPath();
      str3 = getDrive(str2);
      if (str3 != null) {
        return str3 + str1;
      }
      return str2 + str1;
    }
    if (i == 2)
    {
      str2 = getUserPath();
      str3 = getDrive(str2);
      if ((str3 != null) && (str1.startsWith(str3))) {
        return str2 + slashify(str1.substring(2));
      }
      char c = str1.charAt(0);
      String str4 = getDriveDirectory(c);
      if (str4 != null)
      {
        String str5 = c + ':' + str4 + slashify(str1.substring(2));
        SecurityManager localSecurityManager = System.getSecurityManager();
        try
        {
          if (localSecurityManager != null) {
            localSecurityManager.checkRead(str5);
          }
        }
        catch (SecurityException localSecurityException)
        {
          throw new SecurityException("Cannot resolve path " + str1);
        }
        return str5;
      }
      return c + ":" + slashify(str1.substring(2));
    }
    throw new InternalError("Unresolvable path: " + str1);
  }
  
  private ExpiringCache cache = new ExpiringCache();
  private ExpiringCache prefixCache = new ExpiringCache();
  
  public String canonicalize(String paramString)
    throws IOException
  {
    int i = paramString.length();
    int j;
    if ((i == 2) && (isLetter(paramString.charAt(0))) && (paramString.charAt(1) == ':'))
    {
      j = paramString.charAt(0);
      if ((j >= 65) && (j <= 90)) {
        return paramString;
      }
      return "" + (char)(j - 32) + ':';
    }
    if ((i == 3) && (isLetter(paramString.charAt(0))) && (paramString.charAt(1) == ':') && (paramString.charAt(2) == '\\'))
    {
      j = paramString.charAt(0);
      if ((j >= 65) && (j <= 90)) {
        return paramString;
      }
      return "" + (char)(j - 32) + ':' + '\\';
    }
    if (!useCanonCaches) {
      return canonicalize0(paramString);
    }
    String str1 = this.cache.get(paramString);
    if (str1 == null)
    {
      String str2 = null;
      String str3 = null;
      Object localObject;
      if (useCanonPrefixCache)
      {
        str2 = parentOrNull(paramString);
        if (str2 != null)
        {
          str3 = this.prefixCache.get(str2);
          if (str3 != null)
          {
            localObject = paramString.substring(1 + str2.length());
            str1 = canonicalizeWithPrefix(str3, (String)localObject);
            this.cache.put(str2 + File.separatorChar + (String)localObject, str1);
          }
        }
      }
      if (str1 == null)
      {
        str1 = canonicalize0(paramString);
        this.cache.put(paramString, str1);
        if ((useCanonPrefixCache) && (str2 != null))
        {
          str3 = parentOrNull(str1);
          if (str3 != null)
          {
            localObject = new File(str1);
            if ((((File)localObject).exists()) && (!((File)localObject).isDirectory())) {
              this.prefixCache.put(str2, str3);
            }
          }
        }
      }
    }
    assert (canonicalize0(paramString).equalsIgnoreCase(str1));
    return str1;
  }
  
  protected native String canonicalize0(String paramString)
    throws IOException;
  
  protected String canonicalizeWithPrefix(String paramString1, String paramString2)
    throws IOException
  {
    return canonicalizeWithPrefix0(paramString1, paramString1 + File.separatorChar + paramString2);
  }
  
  protected native String canonicalizeWithPrefix0(String paramString1, String paramString2)
    throws IOException;
  
  static String parentOrNull(String paramString)
  {
    if (paramString == null) {
      return null;
    }
    int i = File.separatorChar;
    int j = 47;
    int k = paramString.length() - 1;
    int m = k;
    int n = 0;
    int i1 = 0;
    while (m > 0)
    {
      int i2 = paramString.charAt(m);
      if (i2 == 46)
      {
        n++;
        if (n >= 2) {
          return null;
        }
        if (i1 == 0) {
          return null;
        }
      }
      else
      {
        if (i2 == i)
        {
          if ((n == 1) && (i1 == 0)) {
            return null;
          }
          if ((m == 0) || (m >= k - 1) || (paramString.charAt(m - 1) == i) || (paramString.charAt(m - 1) == j)) {
            return null;
          }
          return paramString.substring(0, m);
        }
        if (i2 == j) {
          return null;
        }
        if ((i2 == 42) || (i2 == 63)) {
          return null;
        }
        i1++;
        n = 0;
      }
      m--;
    }
    return null;
  }
  
  public native int getBooleanAttributes(File paramFile);
  
  public native boolean checkAccess(File paramFile, int paramInt);
  
  public native long getLastModifiedTime(File paramFile);
  
  public native long getLength(File paramFile);
  
  public native boolean setPermission(File paramFile, int paramInt, boolean paramBoolean1, boolean paramBoolean2);
  
  public native boolean createFileExclusively(String paramString)
    throws IOException;
  
  public boolean delete(File paramFile)
  {
    this.cache.clear();
    this.prefixCache.clear();
    return delete0(paramFile);
  }
  
  protected native boolean delete0(File paramFile);
  
  public native String[] list(File paramFile);
  
  public native boolean createDirectory(File paramFile);
  
  public boolean rename(File paramFile1, File paramFile2)
  {
    this.cache.clear();
    this.prefixCache.clear();
    return rename0(paramFile1, paramFile2);
  }
  
  protected native boolean rename0(File paramFile1, File paramFile2);
  
  public native boolean setLastModifiedTime(File paramFile, long paramLong);
  
  public native boolean setReadOnly(File paramFile);
  
  private boolean access(String paramString)
  {
    try
    {
      SecurityManager localSecurityManager = System.getSecurityManager();
      if (localSecurityManager != null) {
        localSecurityManager.checkRead(paramString);
      }
      return true;
    }
    catch (SecurityException localSecurityException) {}
    return false;
  }
  
  private static native int listRoots0();
  
  public File[] listRoots()
  {
    int i = listRoots0();
    int j = 0;
    for (int k = 0; k < 26; k++) {
      if ((i >> k & 0x1) != 0) {
        if (!access((char)(65 + k) + ":" + this.slash)) {
          i &= (1 << k ^ 0xFFFFFFFF);
        } else {
          j++;
        }
      }
    }
    File[] arrayOfFile = new File[j];
    int m = 0;
    char c = this.slash;
    for (int n = 0; n < 26; n++) {
      if ((i >> n & 0x1) != 0) {
        arrayOfFile[(m++)] = new File((char)(65 + n) + ":" + c);
      }
    }
    return arrayOfFile;
  }
  
  public long getSpace(File paramFile, int paramInt)
  {
    if (paramFile.exists())
    {
      File localFile = paramFile.isDirectory() ? paramFile : paramFile.getParentFile();
      return getSpace0(localFile, paramInt);
    }
    return 0L;
  }
  
  private native long getSpace0(File paramFile, int paramInt);
  
  public int compare(File paramFile1, File paramFile2)
  {
    return paramFile1.getPath().compareToIgnoreCase(paramFile2.getPath());
  }
  
  public int hashCode(File paramFile)
  {
    return paramFile.getPath().toLowerCase(Locale.ENGLISH).hashCode() ^ 0x12D591;
  }
  
  private static native void initIDs();
  
  static
  {
    driveDirCache = new String[26];
    
    initIDs();
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值