我是新手,哪位高手请帮我看一下这段代码,我一直找不出错误,是练习io流的,问题大概就出在红色字体那里

时间:2020-12-17 21:36:17
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//先把界面做好了
public class Test extends JFrame implements ActionListener{
//菜单主干
JMenuBar jmb=null;
//菜单
JMenu jm=null;
//菜单项
JMenuItem jmi=null;
JMenuItem jmi1=null;
//新建编辑区
JTextArea jta;
JScrollPane jsp;
//定义文件选择组件
JFileChooser jfc=null;
//定义文件输入输出流
FileReader fr=null;
BufferedReader bur;
FileWriter fw=null;
BufferedWriter buw=null;
//所选文件的路径名
String path=null;



public Test()
{
//界面基本属性设置
this.setSize(400,300);
this.setLocation(400, 300);
//this.setLayout(manager);
this.setTitle("记事本");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

//新建对象
jta=new JTextArea();
JScrollPane jsp = new JScrollPane(jta);
jmb=new JMenuBar();
jm=new JMenu("文件(F)");
jmi=new JMenuItem("打开");
jm.setMnemonic('f'); //设置助记符
jmi1=new JMenuItem("保存");

//注册监听
jmi.addActionListener(this);
jmi1.addActionListener(this);


//设置指令别名
jmi.setActionCommand("open");
jmi1.setActionCommand("save");


//加入
this.setJMenuBar(jmb);
this.add(jsp);
jmb.add(jm);
jm.add(jmi);
jm.add(jmi1);
}
/**
 * @param args
 */
public static void main(String[] args) 
{
// TODO Auto-generated method stub
new Test();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("open"))
{
//System.out.print("aa");
jfc=new JFileChooser();
jfc.setDialogTitle("请选择文件...");
jfc.showOpenDialog(null);//演示对话框
jfc.setVisible(true);//让对话框可见
path=jfc.getSelectedFile().getAbsolutePath();//获得地址
try {
fr=new FileReader(path);
bur=new BufferedReader(fr);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

//把内容读到内存
String s=null;
String s1=null;
try {
while((s=bur.readLine())!=null)
{
s1=s1+s+"\r\n";
}
//加到编辑区
jta.setText(s1);//这里稍微注意一下,不知道jsp怎么设置的,但是这样直接加到
//jta里也行
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally
{
try {
fr.close();
bur.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

}
if(e.getActionCommand().equals("save"))
{
jfc=new JFileChooser();
jfc.setDialogTitle("保存");
jfc.showSaveDialog(null);
jfc.setVisible(true);
path=jfc.getSelectedFile().getAbsolutePath();
//System.out.print(jta.getText());

try {
fw=new FileWriter(path);
buw=new BufferedWriter(fw);
System.out.print(this.jta.getText());
buw.write(this.jta.getText());

} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}


finally
{
try
{
fw.close();
buw.close();
}
catch(Exception e1)
{
e1.getMessage();
}
}
}
}

}

7 个解决方案

#1


谁来帮帮忙啊,郁闷着呢。。。

#2


import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;

//先把界面做好了
public class test3 extends JFrame implements ActionListener
{
    //菜单主干
    JMenuBar jmb = null;
    
    //菜单
    JMenu jm = null;
    
    //菜单项
    JMenuItem jmi = null;
    
    JMenuItem jmi1 = null;
    
    //新建编辑区
    JTextArea jta;
    
    JScrollPane jsp;
    
    //定义文件选择组件
    JFileChooser jfc = null;
    
    //定义文件输入输出流
    FileReader fr = null;
    
    BufferedReader bur;
    
    FileWriter fw = null;
    
    BufferedWriter buw = null;
    
    //所选文件的路径名
    String path = null;
    
    public void Test()
    {
        Container Container_ = getContentPane();
        Container_.setLayout(new FlowLayout());
        
        //界面基本属性设置
        //this.setLayout(manager);
        this.setTitle("记事本");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        
        //新建对象
        jta = new JTextArea();
        JScrollPane jsp = new JScrollPane(jta);
        jmb = new JMenuBar();
        jm = new JMenu("文件(F)");
        jmi = new JMenuItem("打开");
        jm.setMnemonic('f'); //设置助记符
        jmi1 = new JMenuItem("保存");
//        
//        //注册监听
        jmi.addActionListener(this);
        jmi1.addActionListener(this);
//        
//        //设置指令别名
        jmi.setActionCommand("open");
        jmi1.setActionCommand("save");
        
        //加入
        this.setJMenuBar(jmb);
        this.add(jsp);
        jmb.add(jm);
        jm.add(jmi);
        jm.add(jmi1);
        Container_.add(jm);
   
    }
    
    /**
    * @param args
    */
    public static void main(String[] args)
    {
        test3 ss =  new test3();
        ss.Test();
        ss.setSize(600,400);
        ss.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand().equals("open"))
        {
            //System.out.print("aa");
            jfc = new JFileChooser();
            jfc.setDialogTitle("请选择文件...");
            jfc.showOpenDialog(null);//演示对话框
            jfc.setVisible(true);//让对话框可见
            path = jfc.getSelectedFile().getAbsolutePath();//获得地址
            try
            {
                fr = new FileReader(path);
                bur = new BufferedReader(fr);
            }
            catch (Exception e1)
            {
                e1.printStackTrace();
            }
            
            //把内容读到内存
            String s = null;
            String s1 = null;
            try
            {
                while ((s = bur.readLine()) != null)
                {
                    s1 = s1 + s + "\r\n";
                }
                //加到编辑区
                jta.setText(s1);//这里稍微注意一下,不知道jsp怎么设置的,但是这样直接加到
                //jta里也行
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
            finally
            {
                try
                {
                    fr.close();
                    bur.close();
                }
                catch (Exception e1)
                {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
            
        }
        if (e.getActionCommand().equals("save"))
        {
            jfc = new JFileChooser();
            jfc.setDialogTitle("保存");
            jfc.showSaveDialog(null);
            jfc.setVisible(true);
            path = jfc.getSelectedFile().getAbsolutePath();
            //System.out.print(jta.getText());
            
            try
            {
                fw = new FileWriter(path);
                buw = new BufferedWriter(fw);
                System.out.print(this.jta.getText());
                buw.write(this.jta.getText());
            }
            catch (IOException e1)
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            
            finally
            {
                try
                {
                    fw.close();
                    buw.close();
                }
                catch (Exception e1)
                {
                    e1.getMessage();
                }
            }
        }
    }
    
}

#3


只是页面出来,监听没调 .Swing 学完 就没用过.

#4


是什么问题嘛?我这边测试连中间的textarea都没有,没发测试输入。
你是没有数据刷出吗?在红色代码后面加一句buw.flush()试试吧。

#5


引用 4 楼 abstruct 的回复:
是什么问题嘛?我这边测试连中间的textarea都没有,没发测试输入。
你是没有数据刷出吗?在红色代码后面加一句buw.flush()试试吧。

非常感谢。
我测试的时候有时也看不到textarea,再运行几次就好了,可能有点问题吧,只是学习初期,想理解io的。
加了那个方法以后的确是刷出来了,为什么还要刷一次才出来呢?不理解啊。。。还有个问题就是,如果在textarea中输入一些字符然后保存,如果用电脑自带的记事本打开的话,输入的换行符就没了,但是用我自己的这个记事本打开的话就能看到换行了,不知道什么问题。。。

#6


?什么错误。

#7


引用 6 楼 hamxyy_zz 的回复:
?什么错误。

保存后用系统自带的记事本打开是空的,4楼的让我加flush()是解决了一些问题,能看到保存的内容了,但是换行没了。。。用我自己的这个记事本打开就能看到换行。。。

#1


谁来帮帮忙啊,郁闷着呢。。。

#2


import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;

//先把界面做好了
public class test3 extends JFrame implements ActionListener
{
    //菜单主干
    JMenuBar jmb = null;
    
    //菜单
    JMenu jm = null;
    
    //菜单项
    JMenuItem jmi = null;
    
    JMenuItem jmi1 = null;
    
    //新建编辑区
    JTextArea jta;
    
    JScrollPane jsp;
    
    //定义文件选择组件
    JFileChooser jfc = null;
    
    //定义文件输入输出流
    FileReader fr = null;
    
    BufferedReader bur;
    
    FileWriter fw = null;
    
    BufferedWriter buw = null;
    
    //所选文件的路径名
    String path = null;
    
    public void Test()
    {
        Container Container_ = getContentPane();
        Container_.setLayout(new FlowLayout());
        
        //界面基本属性设置
        //this.setLayout(manager);
        this.setTitle("记事本");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        
        //新建对象
        jta = new JTextArea();
        JScrollPane jsp = new JScrollPane(jta);
        jmb = new JMenuBar();
        jm = new JMenu("文件(F)");
        jmi = new JMenuItem("打开");
        jm.setMnemonic('f'); //设置助记符
        jmi1 = new JMenuItem("保存");
//        
//        //注册监听
        jmi.addActionListener(this);
        jmi1.addActionListener(this);
//        
//        //设置指令别名
        jmi.setActionCommand("open");
        jmi1.setActionCommand("save");
        
        //加入
        this.setJMenuBar(jmb);
        this.add(jsp);
        jmb.add(jm);
        jm.add(jmi);
        jm.add(jmi1);
        Container_.add(jm);
   
    }
    
    /**
    * @param args
    */
    public static void main(String[] args)
    {
        test3 ss =  new test3();
        ss.Test();
        ss.setSize(600,400);
        ss.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand().equals("open"))
        {
            //System.out.print("aa");
            jfc = new JFileChooser();
            jfc.setDialogTitle("请选择文件...");
            jfc.showOpenDialog(null);//演示对话框
            jfc.setVisible(true);//让对话框可见
            path = jfc.getSelectedFile().getAbsolutePath();//获得地址
            try
            {
                fr = new FileReader(path);
                bur = new BufferedReader(fr);
            }
            catch (Exception e1)
            {
                e1.printStackTrace();
            }
            
            //把内容读到内存
            String s = null;
            String s1 = null;
            try
            {
                while ((s = bur.readLine()) != null)
                {
                    s1 = s1 + s + "\r\n";
                }
                //加到编辑区
                jta.setText(s1);//这里稍微注意一下,不知道jsp怎么设置的,但是这样直接加到
                //jta里也行
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
            finally
            {
                try
                {
                    fr.close();
                    bur.close();
                }
                catch (Exception e1)
                {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
            
        }
        if (e.getActionCommand().equals("save"))
        {
            jfc = new JFileChooser();
            jfc.setDialogTitle("保存");
            jfc.showSaveDialog(null);
            jfc.setVisible(true);
            path = jfc.getSelectedFile().getAbsolutePath();
            //System.out.print(jta.getText());
            
            try
            {
                fw = new FileWriter(path);
                buw = new BufferedWriter(fw);
                System.out.print(this.jta.getText());
                buw.write(this.jta.getText());
            }
            catch (IOException e1)
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            
            finally
            {
                try
                {
                    fw.close();
                    buw.close();
                }
                catch (Exception e1)
                {
                    e1.getMessage();
                }
            }
        }
    }
    
}

#3


只是页面出来,监听没调 .Swing 学完 就没用过.

#4


是什么问题嘛?我这边测试连中间的textarea都没有,没发测试输入。
你是没有数据刷出吗?在红色代码后面加一句buw.flush()试试吧。

#5


引用 4 楼 abstruct 的回复:
是什么问题嘛?我这边测试连中间的textarea都没有,没发测试输入。
你是没有数据刷出吗?在红色代码后面加一句buw.flush()试试吧。

非常感谢。
我测试的时候有时也看不到textarea,再运行几次就好了,可能有点问题吧,只是学习初期,想理解io的。
加了那个方法以后的确是刷出来了,为什么还要刷一次才出来呢?不理解啊。。。还有个问题就是,如果在textarea中输入一些字符然后保存,如果用电脑自带的记事本打开的话,输入的换行符就没了,但是用我自己的这个记事本打开的话就能看到换行了,不知道什么问题。。。

#6


?什么错误。

#7


引用 6 楼 hamxyy_zz 的回复:
?什么错误。

保存后用系统自带的记事本打开是空的,4楼的让我加flush()是解决了一些问题,能看到保存的内容了,但是换行没了。。。用我自己的这个记事本打开就能看到换行。。。