Texto num outputstream

6 respostas
L

Alguém poderia me ajudar?.. não sei como fazer:

um método que adiciona um texto num outputstream respeitando o maximo de caracteres, e adicionando espaços se necessário.

O que preciso fazer é uma query onde vai me trazer todos os campos de uma tabela, depois eu preciso gravar esses dados em um arquivo, tipo nesse formato: 000000000010032013 0000000002020 etc…

alguém sabe como fazer???

6 Respostas

E

Procure as opções de formatação do método printf (encapsule seu OutputStream em um PrintWriter).

Por exemplo, para imprimir um número com exatamente 10 casas, completando com zeros à esquerda:

int numero = 1234;
pw.printf ("%010d", numero);

As opções estão documentadas aqui:
http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html
O método printf aqui:
http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#printf(java.lang.String,%20java.lang.Object...)

V

qual o seu objetivo ao fazer isso ?

por que guardar assim ?

L

entanglement.. achei esse exemplo criei uma classe e rodei esse exemplo para tentar entender como funciona:

public static void main(String[] args) {  
        try {  
            Scanner entrada = new Scanner(System.in);  
  
            PrintWriter pw = null;  
            try {  
                pw = new PrintWriter(new BufferedWriter(new FileWriter("C:\\novoarquivo.txt")));  
  
                String linha = "";  
                do {
                	int numero= 123;
                    linha = entrada.nextLine();  
//                    pw.println(linha);  
                    pw.printf("%010d", numero);
                } while (!linha.isEmpty());  
            } finally {  
                if (pw != null) {  
                    pw.flush();  
                    pw.close();  
                }  
            }  
        } catch (IOException e) {  
            throw new RuntimeException(e);  
        }  
    }

ai acrescentei o exemplo que você me deu: pw.printf("%010d", numero); para ver se funciona,.. ele gravou no arquivo: [telefone removido] (que era o que eu queria), mas não entendi como gravar numeros e letras.. não entendi como fazer isso!, por que no caso no arquivo eu vou gravar datas,valores e nomes....

Victor Gerin ... então, é que aqui no serviço pediram, por que precisamos gerar um arquivo com todas as transações feitas.. transações de debito, creditio e transferencia, e exigem que seja nesse formato.

E

Como eu falei, basta dar uma olhada naqueles links que lhe passei.

Para escrever uma mensagem de 10 caracteres em um campo de 20 posições fixas, use

%-20.20s

onde:

  • -> alinhado à esquerda (se não puser o sinal de -, fica alinhado à direita, o que provavelmente não é o que você quer
  1. -> ocupa pelo menos 20 posições
    .20 -> ocupa no máximo 20 posições

Certo?

V

se é realmente 100% necessário fazer neste formato então blz xD
a dica do “entanglement” deve funcionar bem xD

L

Demorei mas consegui (com algumas ajudas claro):

public static void writeNumber(Number number, int maxLength, PrintWriter printWriter)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(stripDecimalSeparators(number));
		sb.reverse();
		
		if(sb.length() > maxLength)
		{
			throw new RuntimeException("MaxLength Exceeded");
		}
		
		while(sb.length() < maxLength)
		{
			sb.append("0");
		}
		
		sb.reverse();
		
		printWriter.print(sb.toString());
		
	}
	
	public static void writeText(String text, int maxLength, PrintWriter printWriter)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(text);
		
		if(sb.length() > maxLength)
		{
			throw new RuntimeException("MaxLength Exceeded");
		}
		
		while(sb.length() < maxLength)
		{
			sb.append(" ");
		}
		
		printWriter.print(sb.toString());
	}
	
	public static void writeBreakLine(PrintWriter printWriter)
	{
		printWriter.print("\r\n");
	}
	
	private static String stripDecimalSeparators(Number number)
	{
		BigDecimal bigDecimal = null;
		
		if(number instanceof Double || number instanceof Float)
		{
			bigDecimal = new BigDecimal(number.doubleValue());
			bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_DOWN);
			return bigDecimal.toString().replace(".", "").replace(",", "");
		}
		else if (number instanceof BigDecimal)
		{
			bigDecimal = (BigDecimal) number;
			bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_DOWN);
			return bigDecimal.toString().replace(".", "").replace(",", "");
		}
		else if (number instanceof Integer || number instanceof Long)
		{
			return number.toString();
		}
		else
		{
			return null;
		}
	}

e depois eu criei um metodo p chamar esses metodos.....

Agora eu precisava de uma outra ajuda, eu preciso de gravar tb no arquivo, um sequencial... tipo, toda vez q ele gerar o arquivo eu tenho q gerar esse sequencial, por exemplo, o sequencial inicial é assim: 000000001 (com 9 posições), qdo gerar o arquivo novamente ele terá q somar com o anterior e ficar assim , por exemplo: 000000002 ... alguém sabe como fazer esse sequencial?

Criado 12 de julho de 2013
Ultima resposta 1 de ago. de 2013
Respostas 6
Participantes 3