package org.accp.explor; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce
package org.accp.explor;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.Date;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
public class Test1 extends DefaultMutableTreeNode {
private static final long serialVersionUID = 6999685634761062308L;
private class MyFile {//这个内部类的用处在于在JTree节点的select发生时,对所选文件进行格式转化
private File file;
public MyFile(File file) {
this.file = file;
}
public String toString() {
String name = file.getName().trim();
if (name.length() == 0)
name = file.getAbsolutePath().trim();
return name;
}
}
DefaultMutableTreeNode treeRoot;
DefaultTableModel tableModel;
JTable table;
DefaultMutableTreeNode parent;
Object[][] list = { {} };
public void treeMake() throws UnknownHostException { // 添加机器码&&构造界面
InetAddress local = InetAddress.getLocalHost();
treeRoot = new DefaultMutableTreeNode(local.getHostName());
final JTree tree = new JTree(treeRoot);
JScrollPane scrolltree = new JScrollPane(tree);
scrolltree.setPreferredSize(new Dimension(200, 300));
String[] row = { "文件", "类型", "最后修改日期" };
tableModel = new DefaultTableModel(list, row);
table = new JTable(tableModel);
JScrollPane scrollTable = new JScrollPane(table);
scrollTable.setPreferredSize(new Dimension(500, 500));
MenuBar meb=new MenuBar();
Menu menuFile=new Menu("文件(F)");
Menu menuEdit=new Menu("编辑(E)");
Menu menuLook=new Menu("查看(V)");
meb.add(menuFile);
MenuItem miFile=new MenuItem("打开");
menuFile.add(miFile);
meb.add(menuEdit);
MenuItem miEdit=new MenuItem("复制");
menuEdit.add(miEdit);
meb.add(menuLook);
MenuItem miLook=new MenuItem("工具栏");
menuLook.add(miLook);
JFrame jf = new JFrame();
jf.add(BorderLayout.WEST, scrolltree);
jf.add(BorderLayout.CENTER, scrollTable);
jf.setSize(600, 600);
jf.setVisible(true);
jf.setMenuBar(meb);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加电脑本地硬盘
for (char i = 'c'; i String path = i + ":/";
if (((new File(path)).exists())) {
DefaultMutableTreeNode diskNode = new DefaultMutableTreeNode(
new MyFile(new File(path)));
treeRoot.add(diskNode);
readfiles(new File(path), diskNode);
}
}
tree.addTreeSelectionListener(new TreeSelectionListener() {//添加listener
public void valueChanged(TreeSelectionEvent arg0) {
// TODO 自动生成方法存根
TreePath path = tree.getSelectionPath();
if (path == null)
return;
DefaultMutableTreeNode selectnode = (DefaultMutableTreeNode) path
.getLastPathComponent();
if (!selectnode.isLeaf()) {
// 这里加上类型判断
if (!(selectnode.getUserObject() instanceof MyFile)) {
return;
}
File file_select = ((MyFile) selectnode.getUserObject()).file;
// 读取文件夹下文件添加下层节点
readfiles(file_select, selectnode);
DefaultMutableTreeNode firstchild = (DefaultMutableTreeNode) selectnode
.getFirstChild();
selectnode.remove(firstchild);
tableModel.setRowCount(0);
File[] fileList = file_select.listFiles();
list = fu(fileList);
for (int i = 0; i tableModel.addRow(list[i]);
}
}
else {
tableModel.setRowCount(0);
try {
File file_select = ((MyFile) selectnode.getUserObject()).file;
String sizeFile=size(file_select);
Object re[][]={{file_select.getName(),sizeFile,lastTime(file_select)}};
list=re;
tableModel.addRow(list[0]);
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
});
}
public void readfiles(File file, DefaultMutableTreeNode node) {//读取所选节点,获取子节点
File list[] = file.listFiles();
if (list == null)
return;
for (int i = 0; i File file_inlist = list[i];
// String filename = file_inlist.getName();
if (file_inlist.isDirectory()) {
parent = new DefaultMutableTreeNode(new MyFile(file_inlist));
// 添加空白文件夹节点 使子节点显示为文件夹
File stubadd = null;
DefaultMutableTreeNode stub = new DefaultMutableTreeNode(
stubadd);
parent.add(stub);
node.add(parent);
} else {
DefaultMutableTreeNode son = new DefaultMutableTreeNode(
new MyFile(file_inlist));
node.add(son);
}
}
}
public String size(File file) throws IOException {//读取文件的大小
FileInputStream fileLength = new FileInputStream(file);
String sizefile = fileLength.available() + "字节";
return sizefile;
}
public Date lastTime(File file) {
long lastModified = file.lastModified();// 取得最后一次修改的时间
Date date = new Date(lastModified);
date.setTime(lastModified);
return date;
}
public Object[][] fu(File[] file) {
Object[][] m = new Object[file.length][3];
for (int i = 0; i m[i][0] = file[i].getName();
try {
// 这里有问题,如果是目录,怎么取大小?所以要用if
// m[i][1] = size(file[i]);
if (file[i].isDirectory()) {
m[i][1] = "目录";
} else {
m[i][1] = size(file[i]);
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
m[i][2] = lastTime(file[i]);
}
return m;
}
public int getColumnCount() {
// TODO 自动生成方法存根
return 3;
}
public int getRowCount(File[] file) {
// TODO 自动生成方法存根
return file.length;
}
public Object getValueAt(int row, int col) {
// TODO 自动生成方法存根
return list[row][col];
}
public static void main(String[] args) {
// TODO Auto-generated method
Test1 disk = new Test1();
try {
disk.treeMake();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

MySQL使用的是GPL许可证。1)GPL许可证允许自由使用、修改和分发MySQL,但修改后的分发需遵循GPL。2)商业许可证可避免公开修改,适合需要保密的商业应用。

选择InnoDB而不是MyISAM的情况包括:1)需要事务支持,2)高并发环境,3)需要高数据一致性;反之,选择MyISAM的情况包括:1)主要是读操作,2)不需要事务支持。InnoDB适合需要高数据一致性和事务处理的应用,如电商平台,而MyISAM适合读密集型且无需事务的应用,如博客系统。

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL中有四种主要的索引类型:B-Tree索引、哈希索引、全文索引和空间索引。1.B-Tree索引适用于范围查询、排序和分组,适合在employees表的name列上创建。2.哈希索引适用于等值查询,适合在MEMORY存储引擎的hash_table表的id列上创建。3.全文索引用于文本搜索,适合在articles表的content列上创建。4.空间索引用于地理空间查询,适合在locations表的geom列上创建。

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL和SQLite的主要区别在于设计理念和使用场景:1.MySQL适用于大型应用和企业级解决方案,支持高性能和高并发;2.SQLite适合移动应用和桌面软件,轻量级且易于嵌入。

MySQL中的索引是数据库表中一列或多列的有序结构,用于加速数据检索。1)索引通过减少扫描数据量提升查询速度。2)B-Tree索引利用平衡树结构,适合范围查询和排序。3)创建索引使用CREATEINDEX语句,如CREATEINDEXidx_customer_idONorders(customer_id)。4)复合索引可优化多列查询,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。5)使用EXPLAIN分析查询计划,避

在MySQL中使用事务可以确保数据一致性。1)通过STARTTRANSACTION开始事务,执行SQL操作后用COMMIT提交或ROLLBACK回滚。2)使用SAVEPOINT可以设置保存点,允许部分回滚。3)性能优化建议包括缩短事务时间、避免大规模查询和合理使用隔离级别。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver CS6
视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)