Coloquei esta função em um botão para gerar um txt, pegando do tutorial daqui:
bConfirmar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
FileWriter out = new FileWriter("C:\arquivo.txt");
out.write("Paulinho relembrando Java fodasticamente!!!");
out.close();
}
});
E está dando este errinho fera pra caramba ao compilar:
[code]Exception in thread “AWT-EventQueue-0” java.lang.Error: Unresolved compilation problems:
Unhandled exception type IOException
Unhandled exception type IOException
Unhandled exception type IOException
at gui.Tela1.getJButton(Tela1.java:338)
at gui.Tela1.getJContentPane(Tela1.java:145)
at gui.Tela1.getJFrame(Tela1.java:71)
at gui.Tela1.access$0(Tela1.java:66)
at gui.Tela1$4.run(Tela1.java:427)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)[/code]
[quote=maior_abandonado]olha…o que eu costumo usar é bufferedreader e bufferedwriter pra esse tipo de coisa… e basicamente sempre fico no readLine…
[/quote]
imagino que o processamento dele seja bufferizado, lembro de ler certa vez q ele ao escrever manda acho que de 8 em 8 bytes…algo assim…
e lembro de ter lido tb aconselhando usar essa classe… bom… sei la … eu ainda so meio novato com programação… to aprendendo a minha primeira linguagem…
antes eu usava FileInputStream e FileOutputStream, mais o readLine do inputstream lia uns null entre as linhas direto…era um saco de trata isso, tava deprecated… ai eu intendio pq e resolvi usar alguma outra coisa e que seja mais recomendada pelos veteranos…kkk
edit…
FileReader não tem readLine… daria pra mim ir lendo os char e o for iria até um .available de um java.io.File apontando para o mesmo arquivo… mais acho mais facil usa o bufferedReader… e ir dando readLine até a resposta disso ser null
mais o real motivo de eu estar usando isso volto a fala q é por recoemndação mesmo… passo a palavra pros mais veteranos…rs
Vou dar o conselho correto, já que o pessoal nunca aprende isso direito:
As classes que terminam em Reader e Writer servem para lidar com arquivos-texto (que são compostos de caracteres).
As classes que terminam com InputStream e OutputStream servem para lidar com arquivos seqüenciais (que são compostos de bytes).
Como você sabe que um caracter é composto de bytes, existem duas classes (InputStreamReader e OutputStreamWriter) que servem, respectivamente, para transformar um InputStream em um Reader, e um OutputStream em um Writer.
Se você precisa de usar um arquivo de acesso aleatório, use RandomAccessFile.
As classes que começam por File (exceto a própria classe File) servem para uso com arquivos em disco.
A classe File tem um nome muito ingrato; ela deveria se chamar FileInfo (como no .NET), porque ela não serve para criar arquivos, mas sim para obter informações sobre eles. Por exemplo, para criar um diretório ou listar arquivos você usa a classe File.
As classes que começam por Buffered servem para encapsular outras classes (Reader, Writer, InputStream, OutputStream) e adicionar um buffer, para tornar o processamento mais rápido. Adicionalmente, no caso de BufferedReader, você pode usar o método readLine para ler linhas de um arquivo-texto.
As classes que começam por Print servem para você poder usar os métodos print e println, que permitem escrita de vários tipos de dados. Por exemplo, System.out é um PrintWriter.
Para você ler dados de um arquivo-texto, use a classe Scanner.
Entendi thingol muito obrigado!
Agora me surgiu outra dúvida: Estou em uma tela de cadastro onde jogo as informações em um arquivo texto separados por ‘;’ mas o porblema é que eu queria que ao usuário clicar pra gravar, ele grave no arquivo texto (o que já está fazendo) mas logo em seguida eu limpo a tela para ele já efetuar um novo cadastro, porém, logicamente ele está sobrepondo no arquivo. Como proceder para a gravação dos próximos cadastros se iniciem da posição correta do arquivo?
O trecho do código onde estou gravando no arquivo é o seguinte:
out.write(sFilial+";"+sAtendente+";"+sCliente+";"+sCidade+";"+sEstado+";"+sNome+";"+sCargo+";"+sEmail+";"+sTelefone+";"+sObservacao);
out.close();
}catch (IOException ex) {
System.out.println("Erro ao gerar o Arquivo, contate o Administrador do sistema!");
}[/code]
pw.println (sFilial+";"+sAtendente+";"+sCliente+";"+sCidade+";"+sEstado+";"+sNome+";"+sCargo+";"+sEmail+";"+sTelefone+";"+sObservacao);
} catch (IOException ex) {
System.out.println("Erro ao gerar o Arquivo, contate o Administrador do sistema!");
} finally {
pw.close(); // se não me engano, pw.close não lança exception
}
Mas uma pergunta neste mesmo fonte, como pode ver eu estou usando o getText() para pegar o conteúdo do JText e gravar no arquivo.
Porém já tenho esta classe para limitar o tamanho de meus JTexts:
[code]public class FixedLengthDocument extends PlainDocument
{
private int iMaxLength;
public FixedLengthDocument(int maxlen) {
super();
iMaxLength = maxlen;
}
public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException {
if (str == null) return;
if (iMaxLength <= 0) // aceitara qualquer no. de caracteres
{
super.insertString(offset, str, attr);
return;
}
int ilen = (getLength() + str.length());
if (ilen <= iMaxLength) // se o comprimento final for menor...
super.insertString(offset, str, attr); // ...aceita str
}
}[/code]
Mas minha dúvida é a seguinte, como estou gravando em meu arquivo separando por ‘;’ os campos.
Tem como no arquivo eu gravar o conteúdo que os usuários digitaram?
Está gravando assim:
01;Joaquim;Outrocampo;…
01;Zé;Outrocampo;…
Gostaria de saber se tem como eu gravar com espaços em branco para completar o tamanho do campo:
Exception in thread “AWT-EventQueue-0” java.util.IllegalFormatPrecisionException: 80
at java.util.Formatter$FormatSpecifier.checkDateTime(Unknown Source)
at java.util.Formatter$FormatSpecifier.(Unknown Source)
at java.util.Formatter.parse(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at gui.Tela_Cad$1.actionPerformed(Tela_Cad.java:348)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Tá bom, vamos lá. Eu iria pedir para você ler a documentação de java.util.Formatter, mas vou dizer mais ou menos o que tem de ser feito.
"%-20.20s" é:
"%s" -> formatação de strings.
"-" -> alinhado à esquerda.
"20" -> tamanho mínimo do campo.
".20" -> tamanho máximo do campo. (Ou seja, se a string tiver + de 20 caracteres, será truncada.)
Você usou "t" em vez de "s", e isso lhe provocou essa exception gigante.