Existe alguma classe em java que reconheça quando eu Conecto um Pen drive?

7 respostas
G

Ola pessoal, estou com uma duvida que provavelmente vai ser um pouco complicada de resolver. Estou fazendo um sistema de estoque, e gostaria de colocar o acesso ao sistema, ou seja o local onde geralmente voce coloca seu login e sua senha, por meio de um pen drive. A logica seria mais ou menos assim:

  • usuario entra no sistema e aparece uma tela de login e senha
  • o usuario tem a opçao de inserir o usuario e a senha, ou plugar um pen drive que tenha essas informações.
  • no pen drive, colocarei um arquivo criptografado com as informaçoes de login do usuario.
  • assim que o usuario plugar o pen drive, o sistema vai detectar um novo hardware e vai tentar acessa-lo para buscar as informaçoes do login do usuario
  • depois de autenticado, o usuario entra no sistema

Este tipo de acesso ja vem sendo utilizado pelo banco do brasil, onde pra voce acessar um certo local do site, voce tem que plugar um token, ou um cartao.

Espero que alguem consiga me ajudar.
Obrigado

7 Respostas

V

Não existe esse suporte no Java. Talvez em alguma API externa.

G

Obrigado, talvez eu queira de mais mesmo, kkkkk, tava vendo alguns aplicativos em Delphi e outras linguagem que fazem isso, ai eu gostaria de saber se java tem esse suporte, infelizmente ainda nao. Muito Obrigado.

V

Houve uma JSR para isso: http://javax-usb.org/
E também uma API: http://jusb.sourceforge.net/

Mas faz tempo que não há atualização. Na verdade, teve até um artigo da IBM que falou sobre as duas alternativas, em 2003:
http://www.ibm.com/developerworks/library/j-usb/index.html

Eu acabei baixando um driver que transformava as USBs de alguns dispositivos numa porta serial, e detectei as USBs pela biblioteca javax.comm. Mas, infelizmente, parte da javax.comm também foi descontinuada (em especial as versões para Windows).

G

ViniGodoy:
Houve uma JSR para isso: http://javax-usb.org/
E também uma API: http://jusb.sourceforge.net/

Mas faz tempo que não há atualização. Na verdade, teve até um artigo da IBM que falou sobre as duas alternativas, em 2003:
http://www.ibm.com/developerworks/library/j-usb/index.html

Eu acabei baixando um driver que transformava as USBs de alguns dispositivos numa porta serial, e detectei as USBs pela biblioteca javax.comm. Mas, infelizmente, parte da javax.comm também foi descontinuada (em especial as versões para Windows).

eu tava funçando aqui a net e axei o javax-usb, to lendo agora, vlw.

G

cara, eu estava vendo agorinha uma pagina aqui do guj mesmo, falando sobre mapear a raiz de diretorios, tipo, se voce conecta um dispositivo ele assume uma letra, que é o caminho dele. Ai vem a logica: Eu peço para o aplicativo de tempo em temo mapear a raiz e fazer o teste com cada dispositivo mapeado, se o dispositivo tiver o arquivo que eu to procurando ai ele da uma mensagem e entra no sistema. Nao sei se tem jeito. O unico problema é que eu fechei a pagina e nao to encontrando o artigo de novo, kkkkkk

G

Poxa pessoal, axei uma coisa que pode me ajudar, o topico esta no endereço: http://www.guj.com.br/java/222999-detectar-dispositivos-fisicos-hds-pendrives-etc

O Codigo que vou usar é esse:

File[] roots = File.listRoots();  
	    for (int i = 0; i < roots.length; i++) {  
	        System.out.println(roots[i]);

A cada laço do For, é trazido uma letra de alguma partiçao do seu computador, seja hd( geralmente C:, ou D:) ou pen drive (geralmente G:, ou J:), enfim. A cada laço eu pego essa letra retornada e uso como endereço para ser verificado se existe o arquivo que eu procuro. Logicamente utilizarei uma thread para ficar fazendo o processo de tempo em tempo na minha tela de login, se o pen drive estiver plugado, ele vai ser detectado, entao o programa vai procurar o arquivo dentro do pendrive. Encontrando o arquivo, aparecerá uma mensagem de usuario logado, e ele entra no sistema;

Se alguem tiver uma ideia legal ou um codigo, pode mandar, qualquer coisa ajuda. Obrigado.

D

Com essa classe você conseguirá detectar qualquer unidade que seja inserida no seu pc.

public class FindDrive
{
/**

  • Application Entry Point
    
    */
    
    public static void main(String[] args)
    
    {
    
    String[] letters = new String[]{ A, B, C, D, E, F, G, H, I};
    
    File[] drives = new File[letters.length];
    
    boolean[] isDrive = new boolean[letters.length];
    
    // init the file objects and the initial drive state
    
    for ( int i = 0; i < letters.length; ++i )
    
    {
    
    drives[i] = new File(letters[i]+":/");
    
    isDrive[i] = drives[i].canRead();
    

// isDrive[i] = drives[i].canWrite();
}

System.out.println("FindDrive: waiting for devices...");

 // loop indefinitely
 while(true)
    {
    // check each drive 
    for ( int i = 0; i < letters.length; ++i )
        {
        boolean pluggedIn = drives[i].canRead();

        // if the state has changed output a message
        if ( pluggedIn != isDrive[i] )
            {
            if ( pluggedIn )
                System.out.println("Drive "+letters[i]+" has been plugged in");
            else
                System.out.println("Drive "+letters[i]+" has been unplugged");

            isDrive[i] = pluggedIn;
            }
        }

    // wait before looping
    try { Thread.sleep(100); }
    catch (InterruptedException e) { /* do nothing */ }

    }
}

}

Criado 24 de maio de 2011
Ultima resposta 8 de set. de 2014
Respostas 7
Participantes 3