Package org.rzo.yajsw.os.ms.win.w32

Source Code of org.rzo.yajsw.os.ms.win.w32.FileUtils

/* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* <p/>
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details. 
*/
package org.rzo.yajsw.os.ms.win.w32;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.logging.Logger;

import org.apache.commons.io.filefilter.WildcardFileFilter;

import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.Kernel32Util;
import com.sun.jna.platform.win32.WinNT;

// TODO: Auto-generated Javadoc
/**
* The Class FileUtils.
*/
public class FileUtils
{
  static Logger  log  = Logger.getLogger(FileUtils.class.getName());

  public static long created(File file)
  {

    throw new UnsupportedOperationException("Sorry, not implemented in this verson");
    // long result = -1;
    // SYSTEMTIME sysTime = new SYSTEMTIME();
    // sysTime.size();
    // Pointer hFile =
    // MyKernel32.INSTANCE.CreateFile(file.getAbsolutePath(),
    // MyKernel32..GENERIC_READ, 0, null, MyKernel32.OPEN_EXISTING, 0,
    // null);
    // if (hFile != null)
    // {
    // LongByReference created = new LongByReference();
    // if (MyKernel32.INSTANCE.GetFileTime(hFile, created, null, null))
    // {
    // // if (MyKernel32.INSTANCE.FileTimeToSystemTime(created, sysTime))
    // // {
    // // Calendar c = Calendar.getInstance();
    // // c.setTimeZone(TimeZone.getTimeZone("UTC"));
    // // c.set(sysTime.wYear, sysTime.wMonth-1, sysTime.wDay,
    // sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
    // // result = c.getTimeInMillis();
    // // System.out.println(created.getValue() + " "+ result);
    // // }
    // // found in /org/apache/poi/hpsf/Util.java
    // final long ms_since_16010101 = created.getValue() / (1000 * 10);
    // final long ms_since_19700101 = ms_since_16010101 - EPOCH_DIFF;
    // result = ms_since_19700101;
    // }
    //     
    // MyKernel32.INSTANCE.CloseHandle(hFile);
    //     
    // }
    //   
    //   
    // return result;
  }

  public static long freeSpace(File file)
  {
    if (!file.isDirectory() || !file.exists())
      return -2;

    WinNT.LARGE_INTEGER.ByReference lpTotalNumberOfFreeBytes = new WinNT.LARGE_INTEGER.ByReference();
    lpTotalNumberOfFreeBytes.clear();

    boolean ret = Kernel32.INSTANCE.GetDiskFreeSpaceEx(file.getPath(), null, null, lpTotalNumberOfFreeBytes);
    if (ret)
      return lpTotalNumberOfFreeBytes.getValue();
    else
    {
      String s = Kernel32Util.formatMessageFromLastErrorCode(Kernel32.INSTANCE.GetLastError());
      log.severe("error in File.freeSpace getting for \"" + file.getPath() + "\" " + s);
    }

    return -1;
  }

  public static long totalSpace(File file)
  {
    if (!file.isDirectory() || !file.exists())
      return -2;

    WinNT.LARGE_INTEGER.ByReference lpTotalNumberOfBytes = new WinNT.LARGE_INTEGER.ByReference();
    lpTotalNumberOfBytes.clear();

    boolean ret = Kernel32.INSTANCE.GetDiskFreeSpaceEx(file.getPath(), null, lpTotalNumberOfBytes, null);
    if (ret)
      return lpTotalNumberOfBytes.getValue();
    else
    {
      String s = Kernel32Util.formatMessageFromLastErrorCode(Kernel32.INSTANCE.GetLastError());
      log.severe("error in File.totalSpace getting for \"" + file.getPath() + "\" " + s);
    }

    return -1;

  }

  /**
   * Gets the files.
   *
   * @param workingDir
   *            the working dir
   * @param pattern
   *            the pattern
   *
   * @return the files
   */
  public static Collection getFiles(String workingDir, String pattern)
  {
    ArrayList result = new ArrayList();

    // check if we have a non patterned file name

    // check if we have an absolute file
    File res = new File(pattern);
    if (res.exists() && res.isAbsolute())
    {
      result.add(res);
      return result;
    }

    // check if we have a file relative working dir
    if (!res.isAbsolute())
    {
      res = new File(workingDir, pattern);
      if (res.exists())
      {
        result.add(res);
        return result;
      }
    }

    // so this must be a pattern try to figure out the files
    String[] s = pattern.split("[" + File.separator + "|/]");
    String[] sh;
    if (s.length == 1)
    {
      sh = new String[2];
      sh[0] = ".";
      sh[1] = s[0];
    }
    else
      sh = s;

    if (pattern.startsWith("/") && "".equals(sh[0]))
      sh[0] = "/";

    Collection paths = new HashSet();
    paths.add(sh[0]);
    for (int i = 1; i < sh.length; i++)
    {
      String file = sh[i];
      Collection newPaths = new HashSet();
      for (Iterator it = paths.iterator(); it.hasNext();)
      {
        String pathStr = (String) it.next();
        if (pathStr.endsWith(":"))
          pathStr += "/";
        File path = new File(pathStr);
        if (!path.isDirectory() || !path.exists() || !path.isAbsolute())
          path = new File(workingDir, pathStr);
        Collection files = getWildcardFiles(path.getAbsolutePath(), file);
        for (Iterator it2 = files.iterator(); it2.hasNext();)
        {
          File f = (File) it2.next();
          if (f.isDirectory())
            newPaths.add(f.getPath());
          else if (f.isFile())
            result.add(f);
        }
      }
      paths = newPaths;
    }

    /*
     * String file = s[s.length-1]; String path = pattern.substring(0,
     * pattern.lastIndexOf(file));
     *
     * if (path == null || path.equals("")) path = "."; File fPath = null;
     * try { fPath = new File(path); if (!fPath.isDirectory()) {
     * log.warning("classpath directory "+fPath.getCanonicalPath()+" not
     * found"); return result; } } catch (Exception ex) {
     * log.warning("classpath directory "+path+" error" + ex.getMessage());
     * return result; } FileFilter fileFilter = new
     * WildcardFileFilter(file); File[] thisFiles =
     * fPath.listFiles(fileFilter); for (int i=0; i< thisFiles.length; i++)
     * { File f = thisFiles[i]; if (f.exists()) result.add(f); else
     * log.warning("classpath file "+f.getName() +"not found"); }
     */
    if (result.size() == 0)
      log.warning("No files found for " + pattern);
    return result;
  }

  /**
   * Gets the wildcard files.
   *
   * @param path
   *            the path
   * @param file
   *            the file
   *
   * @return the wildcard files
   */
  private static Collection getWildcardFiles(String path, String file)
  {
    ArrayList result = new ArrayList();
    File fPath = new File(path);
    try
    {
      if (!fPath.isDirectory())
      {
        log.warning("classpath directory " + fPath.getCanonicalPath() + " not found");
        return result;
      }
    }
    catch (Exception ex)
    {
      log.warning("classpath directory " + path + " error" + ex.getMessage());
      return result;
    }
    FileFilter fileFilter = new WildcardFileFilter(file);
    File[] thisFiles = fPath.listFiles(fileFilter);
    for (int i = 0; i < thisFiles.length; i++)
    {
      File f = thisFiles[i];
      if (f.exists())
        result.add(f);
      else
        log.warning("classpath file " + f.getName() + "not found");
    }
    return result;
  }

  /**
   * The main method.
   *
   * @param args
   *            the arguments
   */
  public static void main(String[] args)
  {
    System.out.println(FileUtils.freeSpace(new File("C:\\")));
    System.out.println(FileUtils.totalSpace(new File("C:\\")));
    for (Iterator it = getFiles(".", "lib/*/*/*jar").iterator(); it.hasNext();)
      System.out.println(it.next());
  }
}
TOP

Related Classes of org.rzo.yajsw.os.ms.win.w32.FileUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.