• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

CerelacK

[Java] Obter informações sobre as drives

3 mensagens neste tópico

public Vector diskInfo(){
        Vector info = new Vector();
        FileSystemView fs = FileSystemView.getFileSystemView();
        for (Object elem : File.listRoots()) {
            File tmp = (File)elem;
            Vector v = new Vector();
            v.add(tmp.getAbsolutePath());
            v.add(fs.getSystemDisplayName(new File(tmp.getAbsolutePath())));
            v.add(tmp.getFreeSpace());
            v.add(tmp.getTotalSpace() - tmp.getFreeSpace() );
            v.add(tmp.getTotalSpace());
            info.add(v);
        }
        return info;
    }

Deixo aqui este método que serve para retirar informações sobre as drives.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quantas vezes tive eu de ver esse tipo de código durante o passado semestre ;)

Deixando apenas alguns comentários e reparos, é de notar que esse método, funciona de acordo com o objectivo apenas em sistemas operativos Windows, onde existe o conceito de uma drive ou root por partição, em sistemas operativos onde esse conceito não existe, por exmeplo, Linux, o método listRoots() devolve apenas "/", o que não corresponderá a drives instaladas no sistema.

Seria bom que o método já usasse genéricos, suponho que não pretendas que esse código execute em Java2SE, já que usas foreach e obrigas a que se use, pelo menos o Java 5.

Se o método listRoots devolve objectos do tipo File, porque é que o no ciclo o declaras a variável como sendo Object e dentro fazes um cast? Não tem grande lógica.

Dentro do ciclo não é necessário estar sempre a declarar uma nova variável, basta reutilizar uma previamente declarada e os vectores poderiam ser declarados usando já o espaço que vão utilizar.

Esse ciclo não está também protegido para o caso do método listRoots devolver null, o que é possível de acontecer e iria lançar uma excepção dado que um foreach não pode tratar colecções nulas.

Para terminar deixo uma alternativa ao código apresentado:

    private Vector<Vector<String>> diskInfo() {
        Vector<Vector<String>> info = null;
        FileSystemView fs = FileSystemView.getFileSystemView();
        File[] list = File.listRoots();

        if (list != null) {
            info = new Vector<Vector<String>>(list.length);
            Vector<String> v;
            for (File elem : list) {
                v = new Vector<String>(5);
                v.add(elem.getAbsolutePath());
                v.add(fs.getSystemDisplayName(elem));
                v.add(String.valueOf(elem.getFreeSpace()));
                v.add(String.valueOf(elem.getTotalSpace() - elem.getFreeSpace()));
                v.add(String.valueOf(elem.getTotalSpace()));
                info.add(v);
            }
        }

        return info;
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora