Ler Caracter e Gravar em arquivo em forma nativa Binária

9 respostas
L

E ae GujNautas eu sou novo no Java, mas queria fazer um projeto para melhorar o meu conhecimento, bom ai vai:

[color=darkblue]Eu queria saber como ler um caracter “A,B,C…1,2,3” de um arquivo, e simplesmente gravar de forma binária em outro arquivo.

eh meio confuso mais isso vai me ajudar na lógica de programar o meu projeto. :? [/color]

[color=red]Tipo: |texto.txt|---->|Le arquivo|------>|grava em binário|---------->|texto2.txt|

não eh pra fica 1 e 0 no outro arquivo eh pra manipular binários mesmo (bits) :?
Vlw :lol:
[/color]

9 Respostas

drigo.angelo

Não entendi a parte do grava em binário o0, você só quer mudar a forma como está gravando, sem manipular os dados ou alterar o tipo?

Tipo assim, se o texto.txt tiver assim “Teste123” o texto2.txt vai ficar “Teste123” também né?

L

Sim :lol: mais tipo um caracter tem 8 bits eu vou gravar somente 6 bits, isso eh soh pra saber como que eu faço para gravar em outro arquivo

drigo.angelo

Acho que vou fazer esse também, toda vez que vou fazer uma operação de IO tenho que recorrer a documentação da API, pois acabo esquecendo que métodos/objetos utilizar… xD

L

Alguém Pls :cry:

drigo.angelo

Foi malz a demora.
Não se se é bem isso que você quer, tem que refatorar ainda, mas ta lendo e gravando :D

package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

public class LeArquivo {
	public static void main(String args[]){
		String s = leArquivo();
		gravaArquivo(s);
	}

	private static void gravaArquivo(String s) {
		char sc = File.separatorChar;
		File arquivo = new File(sc+"Temp"+sc+"texto2.txt");
		try{
			if(!arquivo.exists())
				arquivo.createNewFile();
			else{ // Se existir o arquivo, deleta e cria outro novo.
				arquivo.delete();
				arquivo.createNewFile();
			}	
		}catch (IOException e) {
			e.printStackTrace(); //Log here
		}
		FileOutputStream f = null;
		try {
			f = new FileOutputStream(arquivo);
			f.write(s.getBytes());
			f.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace(); // Log here
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				f.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static String leArquivo() {
		char sc = File.separatorChar;
		StringBuilder conteudo = new StringBuilder();
		String l;
		try{
			FileReader reader = new FileReader(sc+"Temp"+sc+"texto.txt");
			BufferedReader bReader = new BufferedReader(reader);
			while((l = bReader.readLine()) != null )
				conteudo.append(l);
		}catch (FileNotFoundException e) {
			e.printStackTrace(); //Log here
		}catch (IOException e) {
			e.printStackTrace(); //Log here
		}
		return conteudo.toString();
	}
}
drigo.angelo

Espero ter ajudado, ao menos pra você ter uma base aí de #comofaz rsrs o FileOutPutStream grava os dados não exatamente em binário, mas grava os bytes, é o mínimo que o java trabalha, eu acho…

Java API:
A file output stream is an output stream for writing data to a File or to a FileDescriptor. Whether or not a file is available or may be created depends upon the underlying platform. Some platforms, in particular, allow a file to be opened for writing by only one FileOutputStream (or other file-writing object) at a time. In such situations the constructors in this class will fail if the file involved is already open.

FileOutputStream is meant for writing streams of raw bytes such as image data. For writing streams of characters, consider using FileWriter.

L

Opa Valew ae, vou estudar esse Script e tenta adaptar o meu :smiley: .

drigo.angelo

To tentando adaptar ele pra criar outra imagem, tipo assim;

imagem.jpg —> Le o arquivo —> Grava em binario —> imagem2.jpg

Mas não ta dando certo, vou continuar tentando aqui xD

drigo.angelo

Ainda não entendo çabosta… o FileInputStream lê os bytes e retorna um int :shock:
Já o FileOutputStream só aceita byte ou byte[]…:twisted:

Criado 1 de fevereiro de 2011
Ultima resposta 1 de fev. de 2011
Respostas 9
Participantes 2