deletedir方法(deleted)

admin 332 0

很多朋友对于deletedir方法和deleted不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

一、java delete 命令删掉的文件怎么恢复

java删除文件或文件夹的具体步骤:

1、验证传入路径是否为正确的路径名(Windows系统,其他系统未使用)

//验证字符串是否为正确路径名的正则表达式

private static String matches="[A-Za-z]:\\\\[^:?\"><*]*";

//通过 sPath.matches(matches)方法的返回值判断是否正确

2、通用的文件夹或文件删除方法,直接调用此方法,即可实现删除文件夹或文件,包括文件夹下的所有文件

*根据路径删除指定的目录或文件,无论存在与否

*@param sPath要删除的目录或文件

*@return删除成功返回 true,否则返回 false。

public boolean DeleteFolder(String sPath){

if(!file.exists()){//不存在返回 false

if(file.isFile()){//为文件时调用删除文件方法

} else{//为目录时调用删除目录方法

return deleteDirectory(sPath);

*@param sPath被删除文件的文件名

*@return单个文件删除成功返回true,否则返回false

public boolean deleteFile(String sPath){

//路径为文件且不为空则进行删除

if(file.isFile()&& file.exists()){

*删除目录(文件夹)以及目录下的文件

*@param sPath被删除目录的文件路径

*@return目录删除成功返回true,否则返回false

public boolean deleteDirectory(String sPath){

//如果sPath不以文件分隔符结尾,自动添加文件分隔符

if(!sPath.endsWith(File.separator)){

sPath= sPath+ File.separator;

File dirFile= new File(sPath);

//如果dir对应的文件不存在,或者不是一个目录,则退出

if(!dirFile.exists()||!dirFile.isDirectory()){

//删除文件夹下的所有文件(包括子目录)

File[] files= dirFile.listFiles();

for(int i= 0; i< files.length; i++){

flag= deleteFile(files[i].getAbsolutePath());

flag= deleteDirectory(files[i].getAbsolutePath());

public static void main(String[] args){

HandleFileClass hfc= new HandleFileClass();

String path="D:\\test\\folder1\\exam1";

boolean result= hfc.CreateFolder(path);

path="D:\\test\\folder2";

result= hfc.DeleteFolder(path);

二、MySQL使用delete把表中的数据删除了,请问怎么恢复

每个 DBA是不是都有过删库的经历?删库了没有备份怎么办?备份恢复后无法启动服务什么情况?表定义损坏数据无法读取怎么办?

我曾遇到某初创互联网企业,因维护人员不规范的备份恢复操作,导致系统表空间文件被初始化,上万张表无法读取,花了数小时才抢救回来。

当你发现数据无法读取时,也许并非数据丢失了,可能是 DBMS找不到描述数据的信息。

先来了解下几张关键的 InnoDB数据字典表,它们保存了部分表定义信息,在我们恢复表结构时需要用到。

SYS_TABLES描述 InnoDB表信息CREATE TABLE `SYS_TABLES`(`NAME` varchar(255) NOT NULL DEFAULT'',表名`ID` bigint(20) unsigned NOT NULL DEFAULT'0',表id`N_COLS` int(10) DEFAULT NULL,`TYPE` int(10) unsigned DEFAULT NULL,`MIX_ID` bigint(20) unsigned DEFAULT NULL,`MIX_LEN` int(10) unsigned DEFAULT NULL,`CLUSTER_NAME` varchar(255) DEFAULT NULL,`SPACE` int(10) unsigned DEFAULT NULL,表空间idPRIMARY KEY(`NAME`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_INDEXES描述 InnoDB索引信息CREATE TABLE `SYS_INDEXES`( `TABLE_ID` bigint(20) unsigned NOT NULL DEFAULT'0',与sys_tables的id对应 `ID` bigint(20) unsigned NOT NULL DEFAULT'0',索引id `NAME` varchar(120) DEFAULT NULL,索引名称 `N_FIELDS` int(10) unsigned DEFAULT NULL,索引包含字段的个数 `TYPE` int(10) unsigned DEFAULT NULL, `SPACE` int(10) unsigned DEFAULT NULL,存储索引的表空间id `PAGE_NO` int(10) unsigned DEFAULT NULL,索引的root page id PRIMARY KEY(`TABLE_ID`,`ID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_COLUMNS描述 InnoDB表的字段信息CREATE TABLE `SYS_COLUMNS`( `TABLE_ID` bigint(20) unsigned NOT NULL,与sys_tables的id对应 `POS` int(10) unsigned NOT NULL,字段相对位置 `NAME` varchar(255) DEFAULT NULL,字段名称 `MTYPE` int(10) unsigned DEFAULT NULL,字段编码 `PRTYPE` int(10) unsigned DEFAULT NULL,字段校验类型 `LEN` int(10) unsigned DEFAULT NULL,字段字节长度 `PREC` int(10) unsigned DEFAULT NULL,字段精度 PRIMARY KEY(`TABLE_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_FIELDS描述全部索引的字段列CREATE TABLE `SYS_FIELDS`( `INDEX_ID` bigint(20) unsigned NOT NULL, `POS` int(10) unsigned NOT NULL, `COL_NAME` varchar(255) DEFAULT NULL, PRIMARY KEY(`INDEX_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;./storage/innobase/include/dict0boot.h文件定义了每个字典表的 index id,对应 id的 page中存储着字典表的数据。

这里我们需要借助 undrop-for-innodb工具恢复数据,它能读取表空间信息得到 page,将数据从 page中提取出来。

# wget https://github.com/chhabhaiya/undrop-for-innodb/archive/master.zip# yum install-y gcc flex bison# make# make sys_parser

sys_parser [-h] [-u] [-p] [-d] databases/table

stream_parser读取 InnoDB page从 ibdata1或 ibd或分区表

#./stream_parserYou must specify file with-f optionUsage:./stream_parser-f<innodb_datafile> [-T N:M] [-s size] [-t size] [-V|-g] Where:-h- Print this help-V or-g- Print debug information-s size- Amount of memory used for disk cache(allowed examples 1G 10M). Default 100M-T- retrieves only pages with index id= NM(N- high word, M- low word of id)-t size- Size of InnoDB tablespace to scan. Use it only if the parser can't determine it by himself.

c_parser从 innodb page中读取记录保存到文件

#./c_parserError: Usage:./c_parser-4|-5|-6 [-dDV]-f<InnoDB page or dir>-t table.sql [-T N:M] [-b<external pages directory>] Where-f<InnoDB page(s)>-- InnoDB page or directory with pages(all pages should have same index_id)-t<table.sql>-- CREATE statement of a table-o<file>-- Save dump in this file. Otherwise print to stdout-l<file>-- Save SQL statements in this file. Otherwise print to stderr-h-- Print this help-d-- Process only those pages which potentially could have deleted records(default= NO)-D-- Recover deleted rows only(default= NO)-U-- Recover UNdeleted rows only(default= YES)-V-- Verbose mode(lots of debug information)-4-- innodb_datafile is in REDUNDANT format-5-- innodb_datafile is in COMPACT format-6-- innodb_datafile is in MySQL 5.6 format-T-- retrieves only pages with index id= NM(N- high word, M- low word of id)-b<dir>-- Directory where external pages can be found. Usually it is pages-XXX/FIL_PAGE_TYPE_BLOB/-i<file>-- Read external pages at their offsets from<file>.-p prefix-- Use prefix for a directory name in LOAD DATA INFILE command

接下来,我们演示场景的几种数据恢复场景。

是否启用了 innodb_file_per_table其恢复方法有所差异,当发生误删表时,应尽快停止MySQL服务,不要启动。若 innodb_file_per_table=ON,最好只读方式重新挂载文件系统,防止其他进程写入数据覆盖之前块设备的数据。

如果评估记录是否被覆盖,可以表中某些记录的作为关键字看是否能从 ibdata1中筛选出。

也可以使用 bvi(适用于较小文件)或 hexdump-C(适用于较大文件)工具

以表 sakila.actor为例CREATE TABLE `actor`(`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,`first_name` varchar(45) NOT NULL,`last_name` varchar(45) NOT NULL,`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY(`actor_id`),KEY `idx_actor_last_name`(`last_name`)) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8

首先恢复表结构信息1.解析系统表空间获取 page信息

./stream_parser-f/var/lib/mysql/ibdata1

2.新建一个 schema,把系统字典表的 DDL导入

cat dictionary/SYS_*| mysql recovered

4.解析系统表空间包含的字典表信息,

./c_parser-4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page-t dictionary/SYS_TABLES.sql> dumps/default/SYS_TABLES 2> dumps/default/SYS_TABLES.sql./c_parser-4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000002.page-t dictionary/SYS_COLUMNS.sql> dumps/default/SYS_COLUMNS 2> dumps/default/SYS_COLUMNS.sql./c_parser-4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000003.page-t dictionary/SYS_INDEXES.sql> dumps/default/SYS_INDEXES 2> dumps/default/SYS_INDEXES.sql./c_parser-4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000004.page-t dictionary/SYS_FIELDS.sql> dumps/default/SYS_FIELDS 2> dumps/default/SYS_FIELDS.sql

cat dumps/default/*.sql| mysql recovered

./sys_parser-pmsandbox-d recovered sakila/actor

由于 5.x版本 innodb引擎并非完整记录表结构信息,会丢失 AUTO_INCREMENT属性、二级索引和外键约束, DECIMAL精度等信息。

若是 mysql 5.5版本 frm文件被从系统删除,在原目录下 touch与原表名相同的 frm文件,还能读取表结构信息和数据。若只有 frm文件,想要获得表结构信息,可使用 mysqlfrm--diagnostic/path/to/xxx.frm,连接 mysql会显示字符集信息。

因为是共享表空间模式,数据页都存储在 ibdata1,可以从 ibdata1文件中提取数据。

1.获取表的 table id,sys_table存有表的 table id,sys_table表 index id是1,所以从0000000000000001.page获取表 id./c_parser-4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page-t dictionary/SYS_TABLES.sql| grep sakila/actor000000000B28 2A000001430D4D SYS_TABLES"sakila/actor" 158 4 1 0 0"" 0000000000B28 2A000001430D4D SYS_TABLES"sakila/actor" 158 4 1 0 0"" 0

2.利用 table id获取表的主键 id,sys_indexes存有表索引信息,innodb索引组织表,找到主键 id即找到数据,sys_indexes的 index id是3,所以从0000000000000003.page获取主键 id

./c_parser-4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000003.page-t dictionary/SYS_INDEXES.sql| grep 158000000000B28 2A000001430BCA SYS_INDEXES 158 376"PRIMARY" 1 3 0 4294967295000000000B28 2A000001430C3C SYS_INDEXES 158 377"idx_actor_last_name" 1 0 0 4294967295000000000B28 2A000001430BCA SYS_INDEXES 158 376"PRIMARY" 1 3 0 4294967295000000000B28 2A000001430C3C SYS_INDEXES 158 377"idx_actor_last_name" 1 0 0 4294967295

3.知道了主键 id,就可以从对应 page中提取表数据,并生成 sql文件。

./c_parser-4f pages-ibdata1/FIL_PAGE_INDEX/0000000000000376.page-t sakila/actor.sql> dumps/default/actor 2> dumps/default/actor_load.sql

cat dumps/default/*.sql| mysql sakila

三、Word VBA教程:Delete方法

VBA教程- Word VBA参考教程- Delete方法

应用于 Cell和 Cells对象的 Delete方法。

删除一个或多个表格单元格并可选择控制如何移动剩余的单元格。

expression必需。该表达式返回以上一个对象。

ShiftCells Variant类型,可选。剩余单元格移动的方向。可以是任意WdDeleteCells常量。如果忽略,最后删除的单元格的右侧单元格向左移动。

应用于 Range和 Selection对象的 Delete方法。

删除指定数目的字符或单词。此方法返回一个 Long值,该数值表明删除项的数目。如果删除失败,则返回的值为 0(零)。

expression.Delete(Unit, Count)

expression必需。该表达式返回以上一个对象。

Unit Variant类型,可选。所需删除的折叠区域或选定内容的单位。可以是下列 WdUnits常量之一:wdCharacter(默认值)或 wdWord。

Count Variant类型,可选。所需删除的单元的数目。若要删除某区域或选定内容之后的单元,请折叠该区域或选定内容并将此参数设置为正数;若要删除某区域或选定内容之前的单元,请折叠该区域或选定内容并将此参数设置为负数。

应用于 ShapeNodes对象的 Delete方法。

expression必需。该表达式返回一个ShapeNodes对象。

Index Long类型,必需。要删除的图形节点的数目。

应用于“应用于”列表中所有其他对象的 Delete方法。

expression必需。该表达式返回“应用于”列表中的一个对象。http://www.33dir.com/z/2016/08/04/2957.html

如果你还想了解更多这方面的信息,记得收藏关注本站。