Exportar em TXT

1 resposta
F

Olá,

Estou usando esse método para criar um arquivo txt com as informações que pego de uma lista.

O problema que estou tendo é que quando faço o download do arquivo, não consigo abrir no Editor de Texto do Linux.

Da o seguinte erro:
O gedit não conseguiu detectar a codificação de caracteres.
Por favor, verifique que você não está tentando abrir um arquivo binário.
Selecione uma codificação de caracteres do menu e tente novamente.

Como posso resolver esse problema?

public Download getCsvPhonesList(WebAddress webAddress) {
		Long id = webAddress.getId(); 
	
		File file = new File(id+".txt");
		String contentType = "document/txt";
		//String contentType = "text/csv";
		//String contentType = "text/plain";
		//String contentType = "application/vnd.ms-excel";

		String csvContent = "";
		
		List<PhoneAuthenticated> phones = new ArrayList<PhoneAuthenticated>();
		switch (webAddress.getType()) {
			case URL: 
				phones = phoneDAO.listWithAddress((Url) webAddress, 0, Integer.MAX_VALUE); 
				break;
			case EMAIL: 
				phones = phoneDAO.listWithAddress((Email) webAddress, 0, Integer.MAX_VALUE); 
				break;
		}
		
		for (PhoneAuthenticated phone : phones) {
			
			//csvContent += "\"" + phone.getName() + " \";";
			csvContent += phone.getName() + ";";
			csvContent += phone.getAreaCode() + ";";
			csvContent += phone.getNumber() + ";";
			csvContent += phone.getLbs() + ";";
			
			if(phone.getAddress() != null){
				csvContent += phone.getAddress().getStreet1() + ";";
				csvContent += phone.getAddress().getCity() + ";";
				csvContent += phone.getAddress().getState().getName() + ";";
				csvContent += phone.getAddress().getState().getCountry().getNameEnglish() + ";";
				csvContent += phone.getAddress().getZipCode() + ";";
				csvContent += phone.getAddress().getLatitude() + ";";
				csvContent += phone.getAddress().getLongitude() + ";";
			}
			csvContent += "\n";
		}

		try {
			file.createNewFile();
			FileOutputStream fos = new FileOutputStream(file);
			
			for (char c : csvContent.toCharArray()) {
				fos.write(c);
			}
			fos.flush();
			fos.close();
			
		} catch (IOException e) {		
			e.printStackTrace();
		}
		
		return new FileDownload(file, contentType);
			
	}

1 Resposta

J

Vc parece estar tendo problemas de codificação do arquivo.

Infelizmente não tem como resolver isso… se você gerar um arquivo com ISO-8859-1 e seu linux tiver configurado para UTF-8, na hora de abrir o arquivo você vai ter que dizer para ele que é ISO-8859-1. (Isso se ele não conseguir detectar a codificação e as vezes acontece, o caso do ISO e UTF foi só um exemplo).
Tenta abrir com outra ferramenta ou até mesmo com um hexdump, pegue a tabela da codificação e tente entender o por que.

Você também pode especificar a codificação na hora de gerar o arquivo, para isto costumo utilizar a classe BufferedWriter

Exemplo, para forçar a codificação UTF8 na geração do arquivo.

String encoding = "UTF8";
String stringDados = "teste UTF8";
String arquivoExportacao = id + ".txt";
BufferedOutputStream buffStream = new BufferedOutputStream(new FileOutputStream(arquivoExportacao, true));
BufferedWriter outWriter = new BufferedWriter(new OutputStreamWriter(buffStream, encoding));
outWriter.write(stringDados);

Não se esqueça de fechar os streams no final…

Criado 19 de abril de 2012
Ultima resposta 19 de abr. de 2012
Respostas 1
Participantes 2