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