文件编写器不起作用

我使用FileWriter和BufferWriter写入文件。 创建了文件“test.txt”,但没有写入任何内容。

该文件应该写在我的按钮的ActionEvent中。 这是为什么?

那是我的代码:

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.UUID; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; class Cadre_fenetreA2 extends JFrame { JLabel phrase = new JLabel("Veuillez indiquer le nom de chaque groupe de generalisation pour chaque Niveau"); JButton boutonOK = new JButton ("OK"); public Cadre_fenetreA2 (String nom,int X, int Y, int lo, int la, int Na, int [] nbGrpGen,int maxnbGrpGen, File file) { super(nom); setBounds(X,Y,lo,la); setVisible(true); JTextField[][] allField = new JTextField [Na][maxnbGrpGen]; JLabel phrases[] = new JLabel [Na]; String[][] nomGrpGen = new String [Na][maxnbGrpGen]; setLayout(null); for(int i = 0;i < Na;i++) { for(int j = 0;j<nbGrpGen[i];j++) { String uuid = UUID.randomUUID().toString(); allField[i][j] = new JTextField(uuid.substring(0,8)); allField[i][j].setBounds(150+j * 60, 75 + i * 25, 50, 20); add(allField[i][j]); } phrases[i] = new JLabel("Niveau "+String.valueOf(i+1)); phrases[i].setBounds(5, 75 + i * 25, 200, 20); add( phrases[i]); } phrase.setBounds(0,0,1000,50); add(phrase); boutonOK.setBounds(250+maxnbGrpGen*50,25*(Na),60,60); add(boutonOK); boutonOK.addActionListener(new ecout(Na,nbGrpGen,allField,nomGrpGen, file)); } class ecout implements ActionListener { private int Na; private String [][] nomGrpGen ; private JTextField[][] allField; boolean correct=true; private int[] nbGrpGen; String chaine; File file; public ecout(int Na,int[] nbGrpGen, JTextField[][] allField, String[][] nomGrpGen, File file) { this.file = file; this.Na = Na; this.nbGrpGen =nbGrpGen; this.allField =allField; this.nomGrpGen =nomGrpGen; } public void actionPerformed(ActionEvent evt) { for(int i = 0;i < Na ;i++) { for(int j = 0;j < nbGrpGen[i] ;j++) { nomGrpGen[i][j] = allField[i][j].getText(); //chaine=allField[i][j].getText(); //nomGrpGen[i][j] ="A"; if(nomGrpGen[i][j]=="") { correct=false; } } } if(correct) { int i=0; int j=0; int nbElement; JOptionPane jop = new JOptionPane(); String res; do { res= jop.showInputDialog(null, "Veuillez indiquer le nombre d'attribut present au depart", "nombre d'attribut",JOptionPane.QUESTION_MESSAGE); } while(! isInteger(res)); nbElement =Integer.parseInt(res); int largeur=150+nbElement*30+80; int hauteur=30*(nbGrpGen[i])+100; if(largeur<600) { largeur=600; } try { FileWriter fw = new FileWriter("test.txt"); BufferedWriter out = new BufferedWriter(fw); out.write("aString"); } catch (IOException e) { e.printStackTrace(); } dispose(); i=0; j=0; new Cadre_fenetreA3 ("initialisation du groupe"+nomGrpGen[i][j],5,5,largeur, hauteur, nbGrpGen[i], nbElement,nomGrpGen[i], i+1); } } } public boolean isInteger( String input ) { try { Integer.parseInt( input ); return true; } catch( Exception e) { return false; } } } 

这里,

 try { FileWriter fw = new FileWriter("test.txt"); BufferedWriter out = new BufferedWriter(fw); out.write("aString"); } catch (IOException e) { e.printStackTrace(); } 

您将它包装在BufferedWriter ,其默认缓冲区大小为8KB。 因此,只要您不写超过8KB并且不刷新/关闭它,它就不会出现在目标文件中。

完成后,您需要关闭编写器。 这将刷新任何缓冲区并释放文件上的任何锁定。 正常的习惯用法是在与创建它的地方相同的try块的finally块中关闭它。 通过这种方式,您可以保证在exception情况下它也会关闭,从而防止资源泄漏和永久锁定的文件。

 Writer writer = null; try { writer = new BufferedWriter(new FileWriter("test.txt")); writer.write("aString"); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) try { writer.close(); } catch (IOException ignore) {} } 

或者,如果您已经使用Java 7,那么您也可以使用新的try-with-resources语句 。 离开try块时它会自动关闭资源,从而减少样板代码。

 try (Writer writer = new BufferedWriter(new FileWriter("test.txt"))) { writer.write("aString"); } catch (IOException e) { e.printStackTrace(); } 

顺便说一句,我也在处理exception处理。 而是向最终用户显示一些明智的错误消息,而不是将其打印到stdout并进一步忽略它。

关闭或刷新作者:

 FileWriter fw = new FileWriter("test.txt"); BufferedWriter out = new BufferedWriter(fw); out.write("aString"); out.close(); 

你必须冲洗你的作家。

 out.flush(); out.close(); 

完成所有写入操作后,将这两行放在关闭文件中

按照这些顺序成功写入文件….

 File f = new File("d:\\test.txt"); FileWriter fw = new FileWriter(f); BufferedWriter bw = new BufferedWriter(fw); bw.write("Hello........"); // Writing to the file bw.close(); // Close the BufferedWriter fw.close(); // Close the FileWriter 

关闭Streams很重要….

  import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class TestAndDelete { public static void main(String[] args) throws IOException { String test="hi how are you"; File file =new File("D:/abcd/ravi.json"); FileWriter fw=new FileWriter(file.getAbsoluteFile()); BufferedWriter bw=new BufferedWriter(fw); bw.append(test); bw.close(); } }