简单记事本及目录树形图的Java实现

简介:

用Java实现一个简单的记事本,使其可以通过给定文件的绝对路径打开文件,当该文件名是目录时,则打开一个目录并浏览该目录下的文件结构,即目录树形图。

实现原理也不难,如下:

1、判断给定的绝对路径是否为文件,若为文件则直接在编辑区中显示文件里面的内容。

2、当绝对路径是目录时,则进入该目录,遍历目录内的每一个文件,并递归地打印出该目录的树形图。

3、保存文件是=时,则打开文件对话框,获取对话框当前的目录路径,以及对话框中用户输入的“文件名”,据此新建一个File对象,将编辑区中的内容写入到新建的文件中,即实现了保存文件的功能。 

下面是实现之后的界面:

 

 代码实现如下:

 
  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3. import java.io.*;  
  4. import javax.swing.*;  
  5.  
  6. public class FileEditor extends JFrame {  
  7.  
  8.     private JTextField selectField; //文件的绝对路径文本域  
  9.     private JTextArea editArea;     //编辑区  
  10.     private JButton saveBtn;        //“保存”按钮  
  11.     private JButton openFileBtn;    //“浏览”按钮  
  12.  
  13.     private int level = 0;          //记录目录层次数  
  14.  
  15.     public FileEditor() {  
  16.         this.init();  
  17.     }  
  18.  
  19.     private void init() {  
  20.         this.setTitle("简单记事本");  
  21.         this.setBounds(30050600650);  
  22.  
  23.         /*  
  24.          * 面板的北边,即路径输入域、浏览按钮  
  25.          */ 
  26.         selectField = new JTextField(40);  
  27.         openFileBtn = new JButton("浏览");  
  28.         openFileBtn.addActionListener(new ActionListener() {  
  29.             public void actionPerformed(ActionEvent ae) {  
  30.                 FileEditor.this.level = 0;  
  31.                 String path = selectField.getText();  
  32.                 // 浏览目录或者文件  
  33.                 openDirOrFile(path.replaceAll("/""\\"));  
  34.             }  
  35.         });  
  36.         JPanel upPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));  
  37.         upPanel.setBackground(Color.CYAN);  
  38.         upPanel.add(selectField);  
  39.         upPanel.add(openFileBtn);  
  40.         this.add(upPanel, BorderLayout.NORTH);  
  41.  
  42.         /*  
  43.          * 文本编辑区  
  44.          */ 
  45.         editArea = new JTextArea();  
  46.         ScrollPane scollPanel = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);  
  47.         scollPanel.add(editArea);  
  48.         this.add(scollPanel, BorderLayout.CENTER);  
  49.  
  50.         /*  
  51.          * 保存按钮  
  52.          */ 
  53.         saveBtn = new JButton("保存");  
  54.         saveBtn.addActionListener(new ActionListener() {  
  55.             public void actionPerformed(ActionEvent ae) {  
  56.                 // 保存  
  57.                 saveFile();  
  58.             }  
  59.         });  
  60.         JPanel southPanel = new JPanel();  
  61.         southPanel.setBackground(Color.green);  
  62.         southPanel.add(saveBtn);  
  63.         this.add(southPanel, BorderLayout.SOUTH);  
  64.  
  65.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  66.         this.setVisible(true);  
  67.     }  
  68.  
  69.     /**  
  70.      * 保存文件  
  71.      */ 
  72.     private void saveFile() {  
  73.         FileDialog fd = new FileDialog(this"保存文件");  
  74.         fd.setFile("*.java");  
  75.         //设置为“保存”模式  
  76.         fd.setMode(FileDialog.SAVE);  
  77.         fd.setVisible(true);  
  78.         //获取文件名  
  79.         String fileName = fd.getFile();  
  80.         //获取对话框的当前目录  
  81.         String dir = fd.getDirectory();  
  82.         //根据目录名、文件名创建一个文件,即要保存的目标文件  
  83.         File newFile = new File(dir + File.separator + fileName);  
  84.         PrintWriter pw = null;  
  85.         try {  
  86.             pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(  
  87.                     newFile)));  
  88.  
  89.             String str = editArea.getText();  
  90.             pw.println(str);  
  91.             pw.flush();  
  92.         } catch (IOException e) {  
  93.             e.printStackTrace();  
  94.         } finally {  
  95.             pw.close();  
  96.         }  
  97.     }  
  98.  
  99.     /**  
  100.      * 打开目录或文件  
  101.      *   
  102.      * @param absolutePath : 指定目录或文件的绝对路径名  
  103.      */ 
  104.     private void openDirOrFile(String absolutePath) {  
  105.         File file = new File(absolutePath);  
  106.  
  107.         if (!(file.exists())) {  
  108.             editArea.setText("文件不存在!");  
  109.         } else if (file.isDirectory()) {  
  110.             editArea.setText(null);  
  111.             showDir(file);  
  112.         } else if (file.isFile()) {  
  113.             try {  
  114.                 FileInputStream fis = new FileInputStream(file);  
  115.                 BufferedReader br = new BufferedReader(new InputStreamReader(  
  116.                         fis));  
  117.                 String str = null;  
  118.                 editArea.setText(null);  
  119.                 while ((str = br.readLine()) != null) {  
  120.                     editArea.append(str + "\r\n");  
  121.                 }  
  122.                 br.close();  
  123.             } catch (IOException e) {  
  124.                 e.printStackTrace();  
  125.             }  
  126.         }  
  127.  
  128.     }  
  129.  
  130.     /**  
  131.      * 浏览目录,建立树形图  
  132.      *   
  133.      * @param directory :需要打开的目录  
  134.      */ 
  135.     private void showDir(File directory) {  
  136.         File[] files = directory.listFiles();  
  137.         int len = files.length;  
  138.         for (int i = 0; i < len; i++) {  
  139.             if (files[i].isDirectory()) {  
  140.                 for (int j = 0; j < this.level; j++) {  
  141.                     editArea.append("  ");  
  142.                 }  
  143.                 editArea.append(this.level + 1 + "  +" + files[i].getName() + " 文件夹\r\n");  
  144.                 this.level++;  
  145.                 showDir(files[i]);  
  146.             } else if(files[i].isFile()){  
  147.                 for(int j = 0; j < this.level + 2; j++) {  
  148.                     editArea.append(" ");  
  149.                 }  
  150.                 editArea.append(this.level + " ┝ ┈" + files[i].getAbsolutePath() + "\r\n");  
  151.             }  
  152.         }  
  153.     }  
  154.  
  155.     /**  
  156.      * 测试  
  157.      * @param args  
  158.      */ 
  159.     public static void main(String[] args) {  
  160.         new FileEditor();  
  161.     }  

测试:

1、打印一个目录的树形图,如下: 


2、打开一个文本文件,如下:

 

 3、保存文件,如下: 

 

至此,一个简单记事本就完成了。但是,该记事本并没有实现菜单栏等功能。



本文转自 xxxx66yyyy 51CTO博客,原文链接:http://blog.51cto.com/haolloyin/336196,如需转载请自行联系原作者

相关文章
|
4月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
39 4
|
10天前
|
存储 缓存 监控
Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启
【9月更文挑战第22天】在Java应用中,若图片位于bin目录下且下载新图片导致应用重启,可能是因为部署方式不当或资源监控机制过于敏感。解决方法包括:更改图片存储位置至独立目录;配置应用服务器减少资源监控敏感度;使用独立资源服务器托管静态资源;优化代码减少资源重复加载。具体方案需根据应用实际情况和技术栈调整。
|
2月前
|
存储 Java
|
2月前
|
JavaScript Java
点击按钮,向下添加目录。Java script+jQuery写法
点击按钮,向下添加目录。Java script+jQuery写法
17 1
|
2月前
|
Java
java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
这篇文章介绍了Java中使用`renameTo()`、`Files.copy()`等方法对文件进行重命名、移动和复制的操作,并提供了代码实例和测试效果。
java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
|
2月前
|
存储 Java API
Java目录
Java目录
15 0
|
2月前
|
存储 Java
|
4月前
|
存储 安全 Java
深入解析Java HashMap的高性能扩容机制与树化优化
深入解析Java HashMap的高性能扩容机制与树化优化
127 1
|
3月前
|
Java
Java之file,创建文件,File f1 = new File(“E:\\itcast\\java.txt“),先f1定路径,在f1.createNewFile()就能够创建文件,mkdir目录
Java之file,创建文件,File f1 = new File(“E:\\itcast\\java.txt“),先f1定路径,在f1.createNewFile()就能够创建文件,mkdir目录
|
4月前
|
Java API 应用服务中间件
Java一分钟之-JNDI:Java命名和目录接口
【6月更文挑战第3天】JNDI,Java Naming and Directory Interface,是Java的API,用于访问命名和目录服务。本文聚焦JNDI常见问题和易错点:1) 初始化Context时需正确配置环境属性;2) 查找资源时确保名称与服务器配置一致;3) 别忘了导入JNDI库和妥善处理异常;4) 使用后记得关闭资源。理解JNDI并避免这些问题能提升应用的可维护性和灵活性。
108 2
下一篇
无影云桌面