2016-02-17 4 views
3

Мне нужно получить свободное место на диске для всех дисков в системе или во всех разделах, я не против. (Я не должен использовать SIGAR, но я использую его уже на проекте для некоторых других процессов, так что я могу использовать его для этого, как хорошо) Я использую SIGAR API и получил этотПолучить список дисков для чтения свободного пространства на Java, используя Sigar

public double getFreeHdd() throws SigarException{ 
     FileSystemUsage f= sigar.getFileSystemUsage("/"); 
     return (f.getAvail()); 
    } 

Но это только дает мне системный раздел (root), как я могу получить список всех разделов и зацикливать их, чтобы получить их свободное пространство? Я попробовал этот

FileSystemView fsv = FileSystemView.getFileSystemView(); 
     File[] roots = fsv.getRoots(); 
     for (int i = 0; i < roots.length; i++) { 
      System.out.println("Root: " + roots[i]); 
     } 

Но это только возвращает корневого каталога

Корень:/

Благодарности

Редактировать , кажется, что я мог бы использовать FileSystem[] fslist = sigar.getFileSystemList();
Но результаты, которые я получаю, не соответствуют тем, которые я получаю от терминала. С другой стороны, в этой системе я работаю, у меня есть 3 диска с 12 разделами, поэтому я могу что-то потерять. Попробуй его в другой системе, если я смогу сделать что-то полезное из результатов.

+0

Windows, имеет 'Fsutil FSINFO drives', что дает' диски: C: \ E: \ F: \ G: \ и 'Fsutil FSINFO DriveType G:' ', что дает G: - CD-ROM Drive' – Marichyasana

+0

@Marichyasana Я бы предпочел использовать что-то sys независимы. пока это будет выполнено в Linux, но все равно не знает, может ли в будущем использовать Win-box. То почему я пошел для Sigar в первую очередь –

ответ

0

Вы можете использовать java.nio.file.FileSystems, чтобы получить список java.nio.file.FileStorages, а затем посмотреть доступное/доступное место. За экземпляр (при условии, что вы используете Java 7+):

import java.io.IOException; 
import java.nio.file.FileStore; 
import java.nio.file.FileSystem; 
import java.nio.file.FileSystems; 
import java.util.function.Consumer; 

public static void main(String[] args) { 
    FileSystem fs = FileSystems.getDefault(); 
    fs.getFileStores().forEach(new Consumer<FileStore>() { 
     @Override 
     public void accept(FileStore store) { 
      try { 
       System.out.println(store.getTotalSpace()); 
       System.out.println(store.getUsableSpace()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

Кроме того, имейте в виду, что FileStore.getUsableSpace() возвращает размер в байтах. Дополнительную информацию см. В документах.

2

Мы широко используем SIGAR для межплатформенного мониторинга. Это код, который мы используем, чтобы получить список файлов системы:

/** 
* @return a list of directory path names of file systems that are local or network - not removable media 
*/ 
public static Set<String> getLocalOrNetworkFileSystemDirectoryNames() { 
    Set<String> ret = new HashSet<String>(); 
    try { 
    FileSystem[] fileSystemList = getSigarProxy().getFileSystemList(); 

    for (FileSystem fs : fileSystemList) { 
     if ((fs.getType() == FileSystem.TYPE_LOCAL_DISK) || (fs.getType() == FileSystem.TYPE_NETWORK)) { 
     ret.add(fs.getDirName()); 
     } 
    } 
    } 
    catch (SigarException e) { 
    // log or rethrow as appropriate 
    } 

    return ret; 
} 

Вы можете использовать его в качестве входных данных для других методов SIGAR:

FileSystemUsage usageStats = getSigarProxy().getFileSystemUsage(fileSystemDirectoryPath); 

getSigarProxy() только удобство базовый метод:

// The Humidor handles thread safety for a single instance of a Sigar object 
static final private SigarProxy sigarProxy = Humidor.getInstance().getSigar(); 

static final protected SigarProxy getSigarProxy() { 
    return sigarProxy; 
} 
+0

Спасибо за ваши намеки, но по какой-то причине он не читает все мои разделы. Его не хватало, поэтому я пошел с решением marcospereira –

+0

странным ... другие методы сигара работают с путями для разделов, которые не были найдены 'getFileSystemList'? –

+0

нет, у вас нет времени, чтобы посмотреть, что может быть проблемой, тем более, что я получил его работу с другим методом. еще раз спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^