java问题

使用Swing编写一个支持中文文本编辑程序TextEdit.java,要求如下:用户界面大小为400×200像素,如下图所示:程序启动后,多行文本输入框JTextArea... 使用Swing编写一个支持中文文本编辑程序TextEdit.java,要求如下:
用户界面大小为400×200像素,如下图所示:
程序启动后,多行文本输入框JTextArea中显示当前目录下myText.txt文件中原有的内容,如果该文件不存在,则新建该文件。
“保存”按钮功能:将多行文本输入框JTextArea中的内容写入myText.txt文件中保存。
“取消”按钮功能:将多行文本输入框TextArea中的内容清空。
“退出”按钮功能:退出程序
展开
 我来答
李磊_1
2019-09-06 · TA获得超过299个赞
知道小有建树答主
回答量:337
采纳率:66%
帮助的人:119万
展开全部

这里直接把s赋值给readContent是有问题的,问题点如下:

假设文件有两行

第一行

第二行

则读取循环两次,第一次s赋值给readContent,readContent的值为 "第一行",然后又循环,读取第二行,再次赋值,则readContent就会变成 "第二行",第一行的值就丢失了;

这里StringBuff的作用是把读取到的内容连接起来成为一个字符串;

不过这里的例子的确有问题,问题却不在StringBuffer上,而在 s 变量上,s中间两步是不必要的,循环内直接改成如下形式:

删除s.getBytes()和new String

另外,除了以上问题,来总结下这段代码的问题吧:

1、文件资源没有释放

2、在不涉及多线程的情况下,应使用StringBuilder类进行字符串拼接,而不是StringBuffer,因为StringBuilder更快(但是StringBuilder线程不安全,StringBuffer线程安全);

3、异常处理有问题,如果出现IO异常,就返回异常信息的字符串?那么如何区分这个字符串是发生了异常还是从文件中读取到的内容呢?这里不应该返回字符串,而是直接声明异常,有异常就向外抛,直到能处理的顶层程序处理。

基于以上几点,修改代码如下:

注意第27行,声明本方法可能抛出 IOException 异常,稍后主程序将进行处理。另外注意第30行,创建InputStreamReader 的时候指定了文件编码为utf8,以避免乱码,你的文件如果存储的是其他编码类型,则会出现乱码。

调用代码如下:

getContent函数调用主程序

注意18行和21行,是分别处理正常情况和异常情况,当读取异常时,将会调用第21行,打印异常信息;

整体代码如下:

全部代码

接下来我们看看代码执行情况。

1、当我们要读的文件不存在时,执行结果如下:

我们要读的文件不存在时,抛出异常

看,当文件不存在时,抛出异常,并由异常处理程序捕获和打印,你可以看到具体哪一行代码出错[getContent(App.java:29)],说明在App.java 文件中的getContent方法,文件的29行出错。

2、那么正常情况下呢?当然是输出文件内容了,我们放一个有如下内容的文件在"D:\\file.txt"处:

要读取的文件内容

执行结果如下:

正常情况下,输出文件内容

最后,我不知道你看的是什么书,是不是课本,但感觉质量不高,这里给你推荐几本,可以买来看看:

1、Head First java

2、菜鸟教程 Java

3、最权威的,自然是The Java® Language Specificati

祝你学习之路顺利

saturn84
2011-12-11 · 超过24用户采纳过TA的回答
知道答主
回答量:199
采纳率:100%
帮助的人:145万
展开全部
问题介绍:每年教务在安排补考的时候都很费劲,因为有的同学有多门课程需要简单写了一个,没有考虑性能,只考虑功能实现了,你看看 import java.util.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-12-12 · TA获得超过267个赞
知道小有建树答主
回答量:431
采纳率:8%
帮助的人:291万
展开全部
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class TextEditc {
static String filepath;
static JFrame frame = new JFrame("文本编辑器");
static TextArea textArea = new TextArea("", 20, 30,
TextArea.SCROLLBARS_BOTH);
static JButton jButton1 = new JButton("保存"), jButton2 = new JButton("取消"),
jButton3 = new JButton("退出");
JPanel panel = new JPanel();

public TextEditc() {
frame.add(textArea, BorderLayout.CENTER);

panel.add(jButton1);
panel.add(jButton2);
panel.add(jButton3);

frame.add(panel, BorderLayout.SOUTH);
frame.setSize(500, 400);
frame.setVisible(true);
init();
}

public void init() {
jButton1.addActionListener(new SaveFileAction(filepath));
jButton2.addActionListener(new ResetTextArea());
jButton3.addActionListener(new ExitSystemJB());
}

public static void main(String[] args) {
new TextEditc();
}
}

// 保存文件按钮监听事件
class SaveFileAction implements ActionListener {
private String filepath = null;

public SaveFileAction(String filepath) {
this.filepath = filepath;
}

public void actionPerformed(ActionEvent e) {
FileDialog dialog = new FileDialog(new JFrame(), "保存文件",
FileDialog.LOAD);
dialog.setVisible(true);
filepath = dialog.getDirectory() + dialog.getFile();
File file = new File(filepath);
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(file);
// String content = textArea.getText();
String content = TextEditc.textArea.getText();
byte[] b = content.getBytes();
fileOutputStream.write(b);
fileOutputStream.close();// 关闭输出流
} catch (Exception e1) {
e1.printStackTrace();
}
}

}

// 取消按钮监听事件
class ResetTextArea implements ActionListener {
public void actionPerformed(ActionEvent e) {
// textarea区域设置为空
TextEditc.textArea.setText("");
}
}

// 退出按钮监听事件
class ExitSystemJB implements ActionListener {
public void actionPerformed(ActionEvent e) {
int a = JOptionPane.showConfirmDialog(null, "确定关闭吗?", "温馨提示",
JOptionPane.YES_NO_OPTION);
if (a == 0) {
System.exit(0); // 关闭
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式