Latest web development tutorials

fluxo de Java (Stream), arquivo (File) e IO

pacote de classe Java.io inclui quase todas as operações de necessidades de entrada e saída. Todas estas classes de fluxo representam a fonte de entrada e destino de saída.

Java.io pacote de streaming de suportar uma variedade de formatos, tais como: tipos básicos, objetos, conjuntos de caracteres localizadas e assim por diante.

Pode ser entendido como uma sequência de uma corrente de dados. Representa o fluxo de entrada para ler os dados de uma fonte para um fluxo de saída de destino representa gravar dados.

Java fornece um suporte poderoso e flexível para I / O, tornando-o mais amplamente usado em transferências de arquivos e programação de rede.

No entanto, esta seção descreve a funções de I / O relacionados mais básico e fluxo. Vamos aprender através de um exemplo para essas funções.


Leia entrada do console

entrada do console Java concluída até o System.in.

De modo a obter um fluxo de carácter vinculativo para o console, você pode System.in envolto em um objeto BufferedReader para criar um fluxo de caracteres.

Aqui está a sintaxe básica para criar um BufferedReader:

BufferedReader br = new BufferedReader(new 
                      InputStreamReader(System.in));

Após BufferedReader objeto é criado, podemos usar o método read () para ler um caractere do console, ou ler um método cadeia readLine ().


Leia mais entrada de caracteres a partir do console

Ler a partir BufferedReader objeto é um personagem que você quiser usar ler método (), que tem a seguinte sintaxe:

int read( ) throws IOException

Cada chamada para ler () método, que lê um caractere do fluxo de entrada e retorna o personagem como um valor inteiro. Quando o final do fluxo retorna -1. O método lança IOException.

O programa a seguir demonstra o método uso read () lê os caracteres a partir do console continua até que o usuário digitar "q".

// 使用 BufferedReader 在控制台读取字符

import java.io.*;

public class BRRead {
   public static void main(String args[]) throws IOException
   {
      char c;
      // 使用 System.in 创建 BufferedReader 
      BufferedReader br = new BufferedReader(new 
                         InputStreamReader(System.in));
      System.out.println("Enter characters, 'q' to quit.");
      // 读取字符
      do {
         c = (char) br.read();
         System.out.println(c);
      } while(c != 'q');
   }
}

Os exemplos acima são compilados os resultados como se segue:

Enter characters, 'q' to quit.
123abcq
1
2
3
a
b
c
q

Lê uma string a partir do console

Ler a partir da entrada padrão uma corda precisa usar um método BufferedReader readLine ().

Seu formato geral é:

String readLine( ) throws IOException

O programa a seguir lê e linhas exibe caracteres até que você digite a palavra "fim".

// 使用 BufferedReader 在控制台读取字符
import java.io.*;
public class BRReadLines {
   public static void main(String args[]) throws IOException
   {
      // 使用 System.in 创建 BufferedReader 
      BufferedReader br = new BufferedReader(new
                              InputStreamReader(System.in));
      String str;
      System.out.println("Enter lines of text.");
      System.out.println("Enter 'end' to quit.");
      do {
         str = br.readLine();
         System.out.println(str);
      } while(!str.equals("end"));
   }
}

Os exemplos acima são compilados os resultados como se segue:

Enter lines of text.
Enter 'end' to quit.
This is line one
This is line one
This is line two
This is line two
end
end

JDK versão 5 depois também podemos usar Java Scanner classe para obter consola de entrada.

saída do console

Foi introduzida na saída anterior do console é feito através de impressão () e println (). Estes métodos definidos pelo PrintStream classe, System.out é uma referência ao objeto de classe.

PrintStream herdada da classe OutputStream, e implementa o método write (). Assim, de escrita () também pode ser usado para e a partir da consola escreve.

A definição mais simples de PrintStream gravação format () são os seguintes:

void write(int byteval)

Este método irá reduzir octeto byteval gravados no fluxo.

Exemplos

O exemplo a seguir usa write () o caractere "A" e seguido de um caractere de nova linha de saída para a tela:

import java.io.*;

// 演示 System.out.write().
public class WriteDemo {
   public static void main(String args[]) {
      int b; 
      b = 'A';
      System.out.write(b);
      System.out.write('\n');
   }
}

Execute o personagem exemplo de saída acima de "A" na janela de saída

A

Nota: método de gravação () não é frequentemente utilizado porque impressão () e println () método é mais conveniente de usar.


Leitura e Escrita de Arquivos

Como descrito acima, um fluxo é definido como uma sequência de dados. fluxo de entrada para ler dados a partir da fonte para o fluxo de saída de destino para a gravação de dados.

O que se segue é uma descrição dos fluxos de hierarquia de classes de entrada e saída diagrama de.

A seguir irá ser discutido duas correntes importantes são FileInputStream e FileOutputStream:


FileInputStream

A corrente para a leitura de dados a partir de um ficheiro, o objecto pode ser utilizado para criar uma nova palavra-chave.

Existem vários métodos de construção pode ser utilizada para criar objectos.

Você pode usar o nome do arquivo tipo de cadeia para criar um objeto fluxo de entrada para ler o arquivo:

InputStream f = new FileInputStream("C:/java/hello");

Você também pode usar um objeto de arquivo para criar um objeto de fluxo para ler arquivos de entrada. Primeiro temos de usar o método File () para criar um objeto de arquivo:

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

InputStream objeto é criado, você pode usar o método a seguir para ler o fluxo de corrente ou executar outras operações.

Não. Método e Descrição
1 public void close () throws IOException { }
Fecha este fluxo de entrada de arquivo e libera os recursos do sistema associados a este fluxo. Lança IOException.
2 protected void finalize () throws IOException { }
Este método limpa a conexão com o arquivo. Certifique-se de que já não chamar a sua referência método close fluxo de entrada de arquivo. Lança IOException.
3 public int read (int r) lança IOException {}
Este método lê os bytes especificados de dados do objeto InputStream. Ele retorna um valor inteiro. Retorna o próximo byte de dados, se você tem que acabar com ela retorna -1.
4 public int read (byte [] r ) lança IOException {}
Este método lê comprimento bytes r.length do fluxo de entrada. Retorna o número de bytes lidos. Se ele é o fim do arquivo é retornado -1.
5 int público disponível () throws IOException { }
Retorna o próximo invocação de método sobre este fluxo de entrada sem bloquear pelo número de bytes do fluxo de entrada de leitura. Retorna um valor inteiro.

Além de InputStream, há algum outro fluxo de entrada, para mais detalhes, consulte os links a seguir:


FileOutputStream

Essa classe é usada para criar um arquivo e gravar dados de arquivo.

* Se o fluxo de abrir um arquivo para saída, o arquivo de destino não existir, então o fluxo vai criar o arquivo.

Existem duas maneiras de criar um objeto construtor de FileOutputStream.

Use cadeia digite um nome de arquivo para criar um objeto fluxo de saída:

OutputStream f = new FileOutputStream("C:/java/hello") 

Você também pode usar um objeto de arquivo para criar um fluxo de saída para gravar arquivos. Primeiro temos de usar o método File () para criar um objeto de arquivo:

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

Criar OutputStream objeto estiver completa, você pode usar o seguinte método para gravar o fluxo de corrente ou executar outras operações.

Não. Método e Descrição
1 public void close () throws IOException { }
Fecha este fluxo de entrada de arquivo e libera os recursos do sistema associados a este fluxo. Lança IOException.
2 protected void finalize () throws IOException { }
Este método limpa a conexão com o arquivo. Certifique-se de que já não chamar a sua referência método close fluxo de entrada de arquivo. Lança IOException.
3 público de gravação void (int w) throws IOException {}
Este método leva o byte especificado por escrito para o fluxo de saída.
4 public void write (byte [] w )
O comprimento byte do w.length matriz especificada por escrito ao OutputStream.

OutputStream disso, há algum outro fluxo de saída, para mais detalhes, consulte os links a seguir:

Exemplos

Aqui está uma demonstração de exemplos de uso InputStream e OutputStream:

import java.io.*;

public class fileStreamTest{

   public static void main(String args[]){
   
   try{
      byte bWrite [] = {11,21,3,40,5};
      OutputStream os = new FileOutputStream("test.txt");
      for(int x=0; x < bWrite.length ; x++){
         os.write( bWrite[x] ); // writes the bytes
      }
      os.close();
     
      InputStream is = new FileInputStream("test.txt");
      int size = is.available();

      for(int i=0; i< size; i++){
         System.out.print((char)is.read() + "  ");
      }
      is.close();
   }catch(IOException e){
      System.out.print("Exception");
   }	
   }
}

O programa acima cria um arquivo test.txt, e o número dado por escrito em formato binário do documento, enquanto que a saída para o console.

Porque está escrito no código binário acima, não pode ser ilegível, você pode utilizar os seguintes exemplos de código para resolver o problema do lixo:

//文件名 :fileStreamTest2.java
import java.io.*;

public class fileStreamTest2{
	public static void main(String[] args) throws IOException {
		
		File f = new File("a.txt");
		FileOutputStream fop = new FileOutputStream(f);
		// 构建FileOutputStream对象,文件不存在会自动新建
		
		OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
		// 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
		
		writer.append("中文输入");
		// 写入到缓冲区
		
		writer.append("\r\n");
		//换行
		
		writer.append("English");
		// 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
		
		writer.close();
		//关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
		
		fop.close();
		// 关闭输出流,释放系统资源

		FileInputStream fip = new FileInputStream(f);
		// 构建FileInputStream对象
		
		InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
		// 构建InputStreamReader对象,编码与写入相同

		StringBuffer sb = new StringBuffer();
		while (reader.ready()) {
			sb.append((char) reader.read());
			// 转成char加到StringBuffer对象中
		}
		System.out.println(sb.toString());
		reader.close();
		// 关闭读取流
		
		fip.close();
		// 关闭输入流,释放系统资源

	}
}

Arquivos e I / O

Há também aulas de arquivo e I / O, que também precisa saber:


O diretório Java

Criar um diretório:

Ficheiro de classe tem dois métodos pode ser usado para criar uma pasta:

  • mkdir () para criar uma pasta, sucesso, retorna true, falhar, ele retorna false. Falha mostrou objeto File caminho especificado já existe, ou porque todo o caminho não existir, a pasta não pode ser criada.
  • mkdirs () para criar uma pasta e todo o seu pasta pai.

O exemplo a seguir cria a pasta "/ tmp / user / java / bin":

import java.io.File;

public class CreateDir {
   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      // 现在创建目录
      d.mkdirs();
  }
}

Compilar e executar o código acima para criar o diretório "/ tmp / user / java / bin".

Nota: Java no UNIX e Windows automaticamente de acordo com o separador de caminho de arquivo solução acordada. Se você usar um separador na versão Windows do Java, (/), o caminho ainda está para ser devidamente resolvido.


Leia diretório

Um diretório é na verdade um objeto de arquivo que contém outros arquivos e pastas.

Se você criar um objeto File e é um diretório, em seguida, um isDirectory chamada () retorna verdadeiro.

Invocando o método de lista de objetos () para extrair uma lista de arquivos e pastas que ele contém.

O exemplo a seguir mostra como usar o método list () para verificar o conteúdo de um arquivo contido na pasta:

import java.io.File;

public class DirList {
   public static void main(String args[]) {
      String dirname = "/tmp";
      File f1 = new File(dirname);
      if (f1.isDirectory()) {
         System.out.println( "Directory of " + dirname);
         String s[] = f1.list();
         for (int i=0; i < s.length; i++) {
            File f = new File(dirname + "/" + s[i]);
            if (f.isDirectory()) {
               System.out.println(s[i] + " is a directory");
            } else {
               System.out.println(s[i] + " is a file");
            }
         }
      } else {
         System.out.println(dirname + " is not a directory");
    }
  }
}

Os exemplos acima são compilados os resultados como se segue:

Directory of /tmp
bin is a directory
lib is a directory
demo is a directory
test.txt is a file
README is a file
index.html is a file
include is a directory