1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Redirect I/O em Java

Discussão em 'Programação' iniciada por RokeSLB, 3 de Julho de 2007. (Respostas: 9; Visualizações: 1108)

  1. RokeSLB

    RokeSLB Power Member

    Alguem me pode explicar como faço redirecionamento input/output em java, em vez de ser o utilizador a inserir os ficheiros, recebe esses valores de um ficheiro *.txt
     
  2. Gurzi

    Gurzi Power Member

    Usa o FileInputStream :-D
     
  3. RokeSLB

    RokeSLB Power Member

    nao sei o que e isso LOL tou a aprender JAVA à pouco tempo e estou a criar uma aplicaçao que me da geito o redirecionamento.
     
  4. Dan

    Dan Power Member

    Neste momento não estou em casa , mas isso sei que é algo fácil de fazer. Mas já agora o ficheiro *.txt que queres ler vem na linha de comandos ou queres ir buscá-lo a um directório?

    Quando regressar a casa depois venho postar alguma informação, não sei de cor...
     
  5. RokeSLB

    RokeSLB Power Member

    Quero ir buscar a um directorio, fico a aguardar a tua resposta ;)
     
  6. mcog_blaster

    mcog_blaster Power Member

  7. MadOnion

    MadOnion Folding Member

    Em java a leitura/escrita de ficheiro é feita através de um fluxo de dados(streams) que ligam o ficheiros(dados) à estrutura de dados em si(Listas, filas, e até tipos primitivos).

    Um exemplo de uma stream é o File, ou FileReader ou FileWriter.
    Um exemplo de uma estrutura de dados, ArrayList.

    Para a leitura de ficheiros, entre os supra-citados, existe o Scanner e supondo que o mesmo foi declarado dentro do metodo public static void main(String[] args);

    PHP:
    dados.txt
             MadOnion 21 Almada

    Scanner leitor 
    = new Scanner ( new FileReader([args[0]) );
    String nome leitor.next();
    int idade leitor.nextInt();
    String localizacao leitor.next();

    leitor.close();
    Tens as tuas variáveis com os dados do ficheiro:
    Este codigo corre como java MyClass dados.txt

    Existe também uma maneira de introdução dos dados rapida.

    PHP:
    Scanner leitor = new Scanner (System.in);
    String nome leitor.next();
    int idade leitor.nextInt();
    String localizacao leitor.next();
    Este codigo quando é compilado de maneira normal (isto é, java MyClass), é preciso introduzir os dados um por um, mas se tivermos um ficheiro do tipo dados.txt(igual aquele que criei em cima), podes compilar da seguinte maneira:
    Código:
    java MyClass < dados.txt
    
    E ele introduz automaticamente os valores nas respectivas variáveis, excusando de meter os dados um a um, e é até menos susceptivel a erros.


    Não sei se fui claro o suficiente, ou se já expliquei algo que sabias. Se isso acontecer fica a explicação para quem não sabe.
     
  8. RokeSLB

    RokeSLB Power Member

    obrigado pela ajuda! acho que as informaçoes que me forneceram ja consigo fazer.
     
  9. Dan

    Dan Power Member

    A resposta do MadOnion já serve para fazer aquilo que queres, recebendo o ficheiro na linha de comandos.

    A string que passas ao construtor da classe File pode ser o nome do ficheiro, caso se encontre na mesma directoria, ou a directoria onde se encontra o ficheiro.

    Encontrei o ano passado, enquanto andava a fazer um projecto em java, um código que dizem optimizar a leitura de um ficheiro até 10 vezes. Caso queiras ler ficheiros muito grandes, é capaz de ser útil.

    Código:
    
    import java.io.FileInputStream;
    import java.io.BufferedInputStream ;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.FileNotFoundException;
    
    ...
    
    public void openFile(String file) throws IOException {
    
        String temp;
    
        File ficheiro;
        FileInputStream fis;
        BufferedInputStream bis;
        DataInputStream dis;
    
        ficheiro = new File(file);
        try
            {
            fis = new FileInputStream(ficheiro);  
            }
        catch(FileNotFoundException fnf)
            {
            throw new IOException(Mensagens.fileNotFound(file));
            }
        
        bis = new BufferedInputStream(fis);
        dis = new DataInputStream(bis);
        
        temp = dis.readLine();
    
        ...
    
        }
    Depois é só manipular a string até ser == null.

    Não me perguntes como isto funciona, mas aparentemente deve-se ler mais rápido de um DataInputStream do que de um Scanner.



    EDIT: Se ainda não trabalhares com excepções, ignora os blocos try e catch, continuando apenas com a linha fis = new FileInputStream(ficheiro);
     
    Última edição: 3 de Julho de 2007
  10. MadOnion

    MadOnion Folding Member

    Usei o Scanner como exemplo, quando não quero optimizar código.
    Normalmente uso Buffers, é melhor.

    Para ler:
    Código:
    BufferedReader f_in = new BufferedReader(new FileReader("dados.txt"));
    
    Para escrever:
    Código:
    BufferedWriter f_out = new BufferedWriter(new FileWriter("saida.txt"));
    
    Já agora é imperativo que os fluxos sejam fechados, senão vai haver perda de dados no caminhos, ou seja com a linha de código:
    Código:
    f_in.close();
    f_out.close();
    
    Assim há garantias que os dados não se perderam, mas o melhor é testarem e verem com os próprios olhos.
     

Partilhar esta Página