java代码删除文件夹
2020-04-23 本文已影响0人
android_Pie
java用代码删除文件夹
import java.io.File;
public class DeleteThread extends Thread {
File[] files;
String filesname;
public DeleteThread(File[] files, String name) {
this.filesname = name;
this.files = files;
}
@Override
public void run() {
for (int i = 0; i < files.length; i++) {
try {
this.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if ((files[i].isFile() || files[i].isHidden()) && files[i].getName().equals(filesname)) {
if (files[i].delete()) {
} else if (files[i].isDirectory()) {
File file = new File(files[i].getAbsolutePath());
DeleteThread t = new DeleteThread(file.listFiles(), filesname);
t.start();
}
}
//super.run();
}
}
在java中,可以使用InputStream对文件进行读取,就是字节流的输入。当读取文件内容进程序时,需要使用一个byte数组来进行存储,如此会有如下两个问题:
1.如何建立合适大小的byte数组,如果已知输入流的大小。
2.如果不知输入流的大小,则肯定需要建立一个很大的byte数组,那么byte中很可能有空的内容,那么如何正确合适的将byte数组的中的内容输出?
先看第一个问题:解决之道就是获取输入流的大小,创建此大小的byte数组。代码如下:view plaincopy to clipboardprint?
//使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo01
{
public static void main(String args[])throws Exception{
File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
InputStream in = new FileInputStream(f);
byte b[]=new byte[(int)f.length()]; //创建合适文件大小的数组
in.read(b); //读取文件中的内容到b[]数组
in.close();
System.out.println(new String(b));
}
}
//使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo01
{
public static void main(String args[])throws Exception{
File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
InputStream in = new FileInputStream(f);
byte b[]=new byte[(int)f.length()]; //创建合适文件大小的数组
in.read(b); //读取文件中的内容到b[]数组
in.close();
System.out.println(new String(b));
}
}
第二个问题:问题的解决之道就是获得输入流何时结束,它在byte中的尾索引位置。可以通过read()方法实现,read()返回读取的字节内容,当内容为空时返回-1。利用此特征可以解决第二个问题。代码如下:
view plaincopy to clipboardprint?
//同过判断文件的结尾来读取文件
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo02
{
public static void main(String args[]) throws Exception{
File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
InputStream in = new FileInputStream(f);
byte b[] = new byte[1024];
int len = 0;
int temp=0; //所有读取的内容都使用temp接收
while((temp=in.read())!=-1){ //当没有读取完时,继续读取
b[len]=(byte)temp;
len++;
}
in.close();
System.out.println(new String(b,0,len));
}
}
在java中,可以使用InputStream对文件进行读取,就是字节流的输入。当读取文件内容进程序时,需要使用一个byte数组来进行存储,如此会有如下两个问题:
1.如何建立合适大小的byte数组,如果已知输入流的大小。
2.如果不知输入流的大小,则肯定需要建立一个很大的byte数组,那么byte中很可能有空的内容,那么如何正确合适的将byte数组的中的内容输出?
先看第一个问题:解决之道就是获取输入流的大小,创建此大小的byte数组。代码如下:view plaincopy to clipboardprint?
//使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo01
{
public static void main(String args[])throws Exception{
File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
InputStream in = new FileInputStream(f);
byte b[]=new byte[(int)f.length()]; //创建合适文件大小的数组
in.read(b); //读取文件中的内容到b[]数组
in.close();
System.out.println(new String(b));
}
}
//使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo01
{
public static void main(String args[])throws Exception{
File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
InputStream in = new FileInputStream(f);
byte b[]=new byte[(int)f.length()]; //创建合适文件大小的数组
in.read(b); //读取文件中的内容到b[]数组
in.close();
System.out.println(new String(b));
}
}
第二个问题:问题的解决之道就是获得输入流何时结束,它在byte中的尾索引位置。可以通过read()方法实现,read()返回读取的字节内容,当内容为空时返回-1。利用此特征可以解决第二个问题。代码如下:
view plaincopy to clipboardprint?
//同过判断文件的结尾来读取文件
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo02
{
public static void main(String args[]) throws Exception{
File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
InputStream in = new FileInputStream(f);
byte b[] = new byte[1024];
int len = 0;
int temp=0; //所有读取的内容都使用temp接收
while((temp=in.read())!=-1){ //当没有读取完时,继续读取
b[len]=(byte)temp;
len++;
}
in.close();
System.out.println(new String(b,0,len));
}
}
String path=sourceData.get(localDataBrowser.focusPosition).getPath();
File file = new File(path);
file.setExecutable(true,false);
file.setReadable(true,false);
file.setWritable(true,false);
recurDelete(file);
public static void recurDelete(File f){
if(!f.exists())return;
if(f.isFile()){
f.delete();
return;
}
File[] files=f.listFiles();
for(int i= 0;i < files.length; i++){
recurDelete(files[i]);
}
f.delete();
/*if(f.isFile() || f.list().length == 0){
f.delete();
}
for(File fi:f.listFiles()){
if(fi.isDirectory()){
recurDelete(fi);
}
else{
fi.delete();
}
}
f.delete();*/
}
import java.io.File;
public class DeleteDirectory {
/**
* 删除空目录
* @param dir 将要删除的目录路径
*/
private static void doDeleteEmptyDir(String dir) {
boolean success = (new File(dir)).delete();
if (success) {
System.out.println("Successfully deleted empty directory: " + dir);
} else {
System.out.println("Failed to delete empty directory: " + dir);
}
}
/**
* 递归删除目录下的所有文件及子目录下所有文件
* @param dir 将要删除的文件目录
* @return boolean Returns "true" if all deletions were successful.
* If a deletion fails, the method stops attempting to
* delete and returns "false".
*/
private static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
//递归删除目录中的子目录下
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
/**
*测试
*/
public static void main(String[] args) {
doDeleteEmptyDir("new_dir1");
String newDir2 = "new_dir2";
boolean success = deleteDir(new File(newDir2));
if (success) {
System.out.println("Successfully deleted populated directory: " + newDir2);
} else {
System.out.println("Failed to delete populated directory: " + newDir2);
}
}
}
/**
* 遍历删除SD卡中某一文件夹下的指定子文件夹及其子文件
*/
private String filePath = Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/ttpod"; //SD卡中“天天动听”文件夹目录
private String[] fileName = new String[] { "song", "art",
"lyric"}; //删除ttpod文件夹下的三个文件夹及其子文件
private void deleteAllFiles(String filePath,String[] fileName){
File f=new File(filePath);
if(f.exists()){
for(int i=0;i<fileName.length;i++){
File file=new File(filePath+"/"+fileName[i]);
clear(file);
}
Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "文件不存在",Toast.LENGTH_SHORT).show();
}
}
/** 若将整个ttpod文件夹删除,则只需调用这个方法 */
private void clear(File file) {
if (file.exists()) { //指定文件是否存在
if (file.isFile()) { //该路径名表示的文件是否是一个标准文件
file.delete(); //删除该文件
} else if (file.isDirectory()) { //该路径名表示的文件是否是一个目录(文件夹)
File[] files = file.listFiles(); //列出当前文件夹下的所有文件
for (File f : files) {
clear(f); //递归删除
//Log.d("fileName", f.getName()); //打印文件名
}
}
file.delete(); //删除文件夹(song,art,lyric)
}
}
import java.io.File;
/**
* 操作文件帮助类
* @author sRoger.
*/
public final class OperationFileHelper {
/**
* 递归删除文件和文件夹
* @param file 要删除的根目录
*/
public static void RecursionDeleteFile(File file){
if(file.isFile()){
file.delete();
return;
}
if(file.isDirectory()){
File[] childFile = file.listFiles();
if(childFile == null || childFile.length == 0){
file.delete();
return;
}
for(File f : childFile){
RecursionDeleteFile(f);
}
file.delete();
}
}
}
public static void copyFile(String from, String to) {
int bytesum = 0;
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec("su");
runtime.exec("mount -o remount,rw /system");
runtime.exec("chmod 777 "+"/system");
File oldfile = new File(from);
if(oldfile.exists()){
runtime.exec("chmod 777 "+ from);
InputStream inStream = new FileInputStream(from);
FileOutputStream fs = new FileOutputStream(to);
byte[] buffer = new byte[1444];
while (true) {
int byteread = inStream.read(buffer);
if (byteread != -1) {
bytesum += byteread;
fs.write(buffer, 0, byteread);
} else {
inStream.close();
return;
}
}
}
} catch (Exception e) {
e.printStackTrace();