一个简单的读取字符流,显示的例子
package cn.lokvin.examples.io;
import java.awt.Button;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileViewer extends Frame implements ActionListener {
String directory; // 显示 dialog 的目录
TextArea textarea; // 显示文件内容区域
public FileViewer () {
this(null, null);
}
public FileViewer(String fileName) {
this(null, fileName);
}
public FileViewer(String directory, String fileName) {
super(); //创建 Frame
//添加关闭Frame 响应事件
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
textarea = new TextArea("", 24, 80);
textarea.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
textarea.setEditable(false);
this.add("Center", textarea);
Panel p = new Panel();
p.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 5));
this.add(p, "South");
Font font = new Font("SansSerif", Font.BOLD, 14);
Button openfile = new Button("Open File");
Button close = new Button("Close");
openfile.addActionListener(this);
openfile.setActionCommand("open");
openfile.setFont(font);
close.addActionListener(this);
close.setActionCommand("close");
close.setFont(font);
p.add(openfile);
p.add(close);
this.pack();
if(directory == null) {
File f;
if((fileName != null) && (f = new File(fileName)).isAbsolute()) {
directory = f.getParent();
fileName = f.getName();
}else {
directory = System.getProperty("user.dir");
}
}
this.directory = directory;
setFile(directory, fileName);
}
public void setFile(String directory, String fileName) {
if((fileName == null) || (fileName.length() == 0)) return;
File f;
FileReader in = null;
try {
f = new File(directory, fileName);
in = new FileReader(f);
char[] buffer = new char[4096];
int len;
textarea.setText("");
while((len = in.read(buffer)) != -1) {
String s = new String(buffer, 0, len);
textarea.append(s);
}
this.setTitle("FileViewer: " + fileName);//设置窗口名称
textarea.setCaretPosition(0);//到文件起始位置
}catch(IOException e) {
textarea.setText(e.getClass().getName() + " : " + e.getMessage());
this.setTitle("FileViewer: " + fileName + ": I/O Exception");
}finally {
try {
if(in != null) in.close();
}catch(IOException e){}
}
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if(cmd.equals("open")) {
FileDialog f = new FileDialog(this, "Open File", FileDialog.LOAD);
f.setDirectory(directory);
//显示对话框等待用户响应
f.show();
directory = f.getDirectory();
setFile(directory, f.getFile());
f.dispose();
}else if(cmd.equals("close")) {
this.dispose();
}
}
public static void main(String[] args) throws IOException {
Frame f = new FileViewer((args.length == 1 ? args[0]:null));
f.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
f.show();
}
}
分享到:
相关推荐
Qt/C++使用小记9【使用UDP创建连接发送消息/传输单个文件】
这份"java小记.rar"压缩包很可能包含了作者多年从事Java Web开发的经验总结,可能包括代码示例、笔记、最佳实践等内容。 在Java Web开发中,Servlet是核心部分,它是一个Java类,用于扩展服务器的功能,处理HTTP...
序列化是将一个对象的状态转换为字节流,以便存储或在网络中传输。当一个类实现了`Serializable`接口,该类的对象就可以进行序列化。然而,并非所有的类属性都需要被序列化,这就是`transient`关键字发挥作用的地方...
时间和日期中常用到的几个类: java.util.Date, java.util.Calendar, java.util.GregorainCalendar, java.text.DateFormat, java.text.SimpleDateFormat
Java 调用C或C++动态链接库(DLL)主要依赖于Java Native Interface (JNI) 技术。JNI 是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。以下是一个详细的步骤来说明如何使用JNI调用C或C++的动态链接...
在本项目中,我们将探索如何利用Linux操作系统,Java编程语言,Python3,NumPy库以及STL文件格式来实现3D打印技术。这是一个跨学科的综合应用,涉及到计算机科学、软件开发以及制造技术。 首先,Linux是开源的操作...
3. **Y轴映射**:同样,输入域是30个股票价格,输出范围是[0-600px]的区间。使用线性比例可以将每个价格映射为具体的y坐标。 4. **绘制图形**:结合X轴和Y轴的映射规则,可以确定每组数据的x、y坐标值,并绘制出所有...
- **输入/输出框**:平行四边形,表示数据的输入或输出操作。 - **判断框**:菱形,表示条件判断。 - **连接箭头**:表示控制流的方向。 ### 二、常见流程控制结构 #### 1. 顺序结构 顺序结构是最简单的流程控制...
【中控智慧考勤机Java二次开发Demo】是一款专为中控考勤设备设计的Java编程示例,旨在帮助开发者更高效地进行考勤系统的定制与集成。在中控科技的官方网站和售后服务中,通常提供的SDK和示例是基于C#的,但针对Java...
8. **IO和NIO**:JAVA的IO库提供了处理输入输出的方法,而NIO(New IO)引入了非阻塞I/O,提升了效率,适用于高并发场景。 9. **反射机制**:JAVA反射允许在运行时检查类的信息,创建和操作对象,对于理解和使用第...
《国内工作流产品分析小记》是一篇由胡长城(笔名银狐999)撰写,深入探讨了中国国内工作流产品现状的文章。作者基于自身丰富的行业经验和敏锐的洞察力,对当时市场上的工作流产品进行了详尽的分析与评价,重点关注...
### Jquery AutoComplete组件+Ajax实现搜索框输入提示功能详解 #### 前言 在当前Web应用开发中,提供良好的用户体验是至关重要的。本文主要介绍如何使用Jquery AutoComplete组件与Ajax技术来实现搜索框的实时输入...
### Sqlite数据库sqlite3命令小记 #### 一、引言 SQLite 是一款轻量级的数据库管理系统,它被广泛应用于各种应用场景中,特别是在移动设备和嵌入式系统上。SQLite 不仅支持标准的 SQL 语法,还提供了一系列实用的...
将目前国内工作流产品厂商进行了简单的分析、整理 以前的资料,还有参考价值
在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...
环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。 boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。 全部编译是很痛苦的过程
目錄Java基础篇基础鎖多线程并发对象JVMJVM内存结构堆和差Java内存模型垃圾回收Java对象模型热点虚拟机性能监控与故障处理工具类加载机制Linux、IOLinux基础输入输出確保概要理论数据结构与算法RedisRedis 基础redis...
Sublime Text3 安装到使用个人小记
map["one"] = {1, 2, 3}; for (const auto& kvp : map) { std::cout ; for (auto v : kvp.second) { std::cout ; } } ``` - **适用范围**:适用于C风格数组、初始化列表以及任何实现了非成员`begin()`和`end...