Jump to content

Compressor


Sued_Azb
 Share

Recommended Posts

Desculpem incomodar mas deparei-me com um problema quando da realização de um projecto. Este projecto consistia em fazer um compressor descompressor. No fim de muito trabalho deparei-me com o erro:

"Exception thread in "main" java.lang.NullPointerException

      at java.io.Writer.write(unknown source)

      at Compressor.main(Compressor.java:91)"

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.StringTokenizer;

public class Compressor {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
	// TODO Auto-generated method stub

	File arquivoLeitura = new File("c:\\Users\\utilizador\\Documents\\input.txt"); 
	File arquivoescrita = new File("c:\\Users\\utilizador\\Documents\\output.txt"); 
	// pega o tamanho 
	long tamanhoArquivo = arquivoLeitura .length(); 

	// necessario para fazer contagem de linha nos ficheiros
	FileInputStream fs = new FileInputStream(arquivoLeitura); 
	DataInputStream in = new DataInputStream(fs); 

	// necessario para fazer leitura linha a linha
	FileInputStream fs1 = new FileInputStream(arquivoLeitura); 
	DataInputStream in1 = new DataInputStream(fs1); 
	// necessario para fazer escrita no ficheiro
	FileWriter out = new FileWriter(arquivoescrita);


	//Processo para obter o numero de linhas do ficheiro
	LineNumberReader lineRead = new LineNumberReader(new InputStreamReader(in)); 
	lineRead.skip(tamanhoArquivo); 
	// conta o numero de linhas do arquivo,comeca com zero, por isso adiciona 1 
	int numLinhas = lineRead.getLineNumber() + 1; 


	BufferedReader br = new BufferedReader(new InputStreamReader(in1));
	String strLine;
	int posicao_array=0;
	String[] file_number_lines= new String[numLinhas];

	String[] words= new String[200]; 

	//Read File Line By Line
	int variable_line_of_file_number_lines = 0;
	//le o ficheiro linha a linha
	while ((strLine = br.readLine()) != null)   {
		StringTokenizer st = new StringTokenizer(strLine," ");
		String frase_final= "";
		System.out.println("variable_line_of_file_number_lines :"+variable_line_of_file_number_lines);

		//le a linha palavra a palavra
		while (st.hasMoreTokens()) {
			boolean palavra_no_array= false;
			String palavra = st.nextToken();

			//percorre o array de palavras
			for (int x = 0 ; x < words.length ; x++){
				// se existe no array compacta a palavra
				if (palavra.equals(words[x])){
					palavra_no_array= true;

					frase_final= frase_final+" <P><"+x+">";
					break;
				}
			}
			// se nao existe no array introduz
			if(!palavra_no_array){
				words[posicao_array]=palavra;
				posicao_array+=1;

				frase_final= frase_final+" "+palavra;
			}
		}
		// adiciona as frases ao array que ira escrever as frases no ficheiro de output
		file_number_lines[variable_line_of_file_number_lines]=frase_final;
		System.out.println("frase_final :"+file_number_lines[variable_line_of_file_number_lines]);
		variable_line_of_file_number_lines+=1;

	}


	// escreve o ficheiro de output	
	for(int i = 0 ; i<=file_number_lines.length-1; i++){
		out.write(file_number_lines[i]);
		// \n Ž usado para mudar de linha
		out.write("\n");
	}
	// fechar os cursores de leitura e escrita
	in.close();
	out.close();

}
}

Desde já obrigado.

Link to comment
Share on other sites

Segundo a minha analise, o erro está nesta linha:

out.write(file_number_lines[i]);

Esse erro ocorre quando estás a tentar aceder a um método ou atributo de um objecto que não existe ou é null.

No entanto o código pareceu-me estar bem, não me parece estares a aceder a elementos inexistentes do array, e cada a cada string é sempre atribuido um valor, mesmo que seja "". Pelo que peguei nesse código e testei-o. Compilou e correu sem qualquer problema.

Não sei que te diga. Talvez experimenta apagar os ficheiros de in e output e criá-los de novo. Hás vezes há uns glitches relacionados com charsets, ou um byte a mais ou menos aqui ou ali.

Eu testei com ficheiros de texto criados no windows XP com um click do botao direito seguido de "novo ficheiro de texto".

Depois editei o input.txt no meu editor de texto - pspad.

Link to comment
Share on other sites

alguns ficheiros de teste que utilizei deu-me erro mas eu já percebi qual era o problema ... era uma questão de mudar para uma versão do bloco de notas do meu pc assim já funcionou sem problemas ... obrigado pela ajuda ...  🙂

Link to comment
Share on other sites

alguns ficheiros de teste que utilizei deu-me erro mas eu já percebi qual era o problema ... era uma questão de mudar para uma versão do bloco de notas do meu pc assim já funcionou sem problemas ... obrigado pela ajuda ...  🙂

Tudo indicava que o problema fosse esse.

Afixa aí mais detalhes sobre o problema, para o caso de alguem passar por este tópico.

Link to comment
Share on other sites

é que o problema era mesmo esse é que eu corria um ficheiro proveniente de outra versão do Windows e dava o erro apresentado no inicio do tópico, quando copiava para um ficheiro da mesma versão corria tudo normalmente sem qualquer erro.

era qualquer coisa haver com a compatibilidades ou algo assim do género. 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.