/*
* Copyright (C) 2012 YIXIA.COM
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.yixia.zi.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import android.os.Environment;
import android.text.TextUtils;
public class FileHelper {
public static void deleteDir(File f) {
if (f.exists() && f.isDirectory()) {
for (File file : f.listFiles()) {
if (file.isDirectory())
deleteDir(file);
file.delete();
}
f.delete();
}
}
public static void deleteDirAllMedias(File f) {
if (f != null && f.exists() && f.isDirectory()) {
File[] files = f.listFiles();
if (files != null) {
for (File file : files) {
if (file.exists() && !file.isDirectory() && file.canRead() && Media.isVideoOrAudio(file))
file.delete();
}
}
files = f.listFiles();
if (files == null || files.length == 0)
f.delete();
}
}
public static String getCanonical(File f) {
if (f == null)
return null;
try {
return f.getCanonicalPath();
} catch (IOException e) {
return f.getAbsolutePath();
}
}
public static File[] listFilesAccordingPref(File f, final boolean hiddenShown) {
return f.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
if (filename == null)
return false;
File f = new File(dir, filename);
if (!f.canRead() || !hiddenShown && f.isHidden())
return false;
return true;
}
});
}
public static File[] listSubtrackFilesAccordingPref(File f, final boolean hiddenShown) {
return f.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
if (filename == null)
return false;
File f = new File(dir, filename);
if (!f.canRead() || !hiddenShown && f.isHidden() || !Media.isSubTrack(f) && !f.isDirectory())
return false;
return true;
}
});
}
public static String[] listAllMedias(File f) {
File[] medias = f.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
if (filename == null)
return false;
File f = new File(dir, filename);
if (f.exists() && f.canRead() && Media.isVideoOrAudio(f))
return true;
else
return false;
}
});
if (medias == null)
return null;
sortFilesByName(medias);
int len = medias.length;
String[] mediaNames = new String[len];
for (int i = 0; i < len; i++)
mediaNames[i] = FileHelper.getCanonical(medias[i]);
return mediaNames;
}
public static void sortFilesBySize(File[] files) {
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
if (f1.isDirectory() && f2.isDirectory() || f1.isFile() && f2.isFile())
return Long.valueOf(f2.length()).compareTo(f1.length());
else if (f1.isDirectory() && f2.isFile())
return -1;
else
return 1;
}
});
}
public static void sortFilesByName(File[] files) {
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
if (f1.isDirectory() && f2.isDirectory() || f1.isFile() && f2.isFile())
return f1.getName().trim().compareToIgnoreCase(f2.getName().trim());
else if (f1.isDirectory() && f2.isFile())
return -1;
else
return 1;
}
});
}
public static String getUrlFileName(String url) {
int slashIndex = url.lastIndexOf('/');
if (slashIndex > -1)
return url.substring(slashIndex + 1);
else
return url;
}
public static String getUrlFileNameNoEx(String url) {
int slashIndex = url.lastIndexOf('/');
int dotIndex = url.lastIndexOf('.');
String filenameWithoutExtension;
if (dotIndex == -1) {
filenameWithoutExtension = url.substring(slashIndex + 1);
} else {
filenameWithoutExtension = url.substring(slashIndex + 1, dotIndex);
}
return filenameWithoutExtension;
}
public static String getUrlExtension(String url) {
if (!TextUtils.isEmpty(url)) {
int slashIndex = url.lastIndexOf('/');
if (slashIndex > -1) {
String fileName = url.substring(slashIndex + 1);
int dotIndex = fileName.indexOf('.');
int paramIndex = fileName.indexOf('?');
if (dotIndex != -1) {
if (paramIndex == -1) {
paramIndex = fileName.indexOf('&');
if (paramIndex == -1)
return fileName.substring(dotIndex + 1).toLowerCase();
else
return fileName.substring(dotIndex + 1, paramIndex).toLowerCase();
} else if (paramIndex <= (fileName.length() - 1)) {
return fileName.substring(dotIndex + 1, paramIndex).toLowerCase();
}
}
}
}
return "";
}
public static String getFileNameNoEx(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length()))) {
return filename.substring(0, dot);
}
}
return filename;
}
public static boolean sdAvailable() {
return Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState()) || Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
}
public static String getFileNameForTitle(String title) {
int lastDot = title.lastIndexOf('.');
return lastDot > 0 ? title.substring(0, lastDot) : title;
}
public static File getExternalStoragePublicDirectory(String type) {
return new File(Environment.getExternalStorageDirectory(), type);
}
public static int getFileAvailable(String file) {
return getFileAvailable(new File(file));
}
public static int getFileAvailable(File file) {
int ds = 0;
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
ds = fis.available();
} catch (Exception e) {
} finally {
try {
if (fis != null)
fis.close();
} catch (Exception e) {
}
}
return ds;
}
}