/* * Tencent is pleased to support the open source community by making * Tencent GT (Version 2.4 and subsequent versions) available. * * Notwithstanding anything to the contrary herein, any previous version * of Tencent GT shall not be subject to the license hereunder. * All right, title, and interest, including all intellectual property rights, * in and to the previous version of Tencent GT (including any and all copies thereof) * shall be owned and retained by Tencent and subject to the license under the * Tencent GT End User License Agreement (http://gt.qq.com/wp-content/EULA_EN.html). * * Copyright (C) 2015 THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the MIT License (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://opensource.org/licenses/MIT * * 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.tencent.wstt.gt.utils; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.io.Reader; import java.io.Writer; import java.net.Socket; import java.nio.channels.FileChannel; import com.tencent.wstt.gt.GTApp; import com.tencent.wstt.gt.api.utils.Env; import com.tencent.wstt.gt.log.LogUtils; import android.net.LocalSocket; import android.util.Log; import android.view.Gravity; import android.widget.Toast; public class FileUtil { private static final String TAG = "--FileUtil--"; public static final String separator = "/"; public static FilenameFilter CSV_FILTER = new FilenameFilter(){ @Override public boolean accept(File dir, String filename) { if (filename != null && filename.endsWith(LogUtils.GW_POSFIX)) { return true; } return false; }}; public static FilenameFilter DESC_FILTER = new FilenameFilter(){ @Override public boolean accept(File dir, String filename) { if (filename != null && filename.startsWith(LogUtils.GW_DESC_PREFIX) && filename.endsWith(LogUtils.GW_DESC_POSFIX)) { return true; } return false; }}; public static FilenameFilter CSV_AND_DESC_FILTER = new FilenameFilter(){ @Override public boolean accept(File dir, String filename) { if (filename != null && filename.endsWith(LogUtils.GW_POSFIX) || filename != null && filename.startsWith(LogUtils.GW_DESC_PREFIX) && filename.endsWith(LogUtils.GW_DESC_POSFIX)) { return true; } return false; }}; // ==================================================关于文件处理==================================================== public static boolean isPathStringValid(String path) { if (null == path || path.length() == 0) { return false; } if (path.contains(":") || path.contains("*") || path.contains("?") || path.contains("\"") || path.contains("<") || path.contains(">") || path.contains("|")) { Log.w(TAG, "filename can not contains:*:?\"<>|"); return false; } return true; } public static boolean isPath(String path) { if (path.contains(separator) || path.contains("\\")) { return true; } return false; } public static String getPath(String path) { int la = path.lastIndexOf(separator); String subPath = path.substring(0, la); return subPath; } /** * * @param path * 需要转换的路径或文件名 * @param defParent * 默认父路径名,当path只是文件名时,会自动在前面追加上父路径 * @param defPosfix * 默认后缀名,当path不带后缀名时,则自动将其加上 * @return */ public static String convertValidFilePath(String path, String defPosfix) { String filePath = path; if (path.contains(separator) || path.contains("\\")) { int la = filePath.lastIndexOf("."); if (la < 0) { filePath = path + defPosfix; } else { String temp = filePath.substring(la); if (temp.contains(separator) || temp.contains("\\")) { // "."是目录名的一部分而不是后缀名的情况 filePath = path + defPosfix; } // else fileName = fileName } } else { if (!path.contains(".")) // 没有有后缀 { filePath = filePath + defPosfix; } } return filePath; } public static boolean isFileExists(String file) { try { File f = new File(file); if (!f.exists()) { return false; } } catch (Exception e) { e.printStackTrace(); return false; } return true; } public static boolean isFileValid(File f) { if (!f.exists()) { try { f.createNewFile(); } catch (IOException e) { return false; } f.delete(); } return true; } public static boolean isFileValid(File parent, String name) { File f = new File(parent, name); return isFileValid(f); } /** * 删除存在的文件 * * @param filePath */ public static void delExistFile(String filePath) { File f = new File(filePath); if (f.exists()) f.delete(); } /** * BH中的日志保存 * * @param ist * @param path */ public static boolean createDir(String path) { if (!Env.isSDCardExist()) { return false; } File f = new File(path); if (!f.exists()) { return f.mkdirs(); } return true; } public static void createDir(File f) { if (!Env.isSDCardExist()) { return; } if (!f.exists()) { try { f.mkdirs(); } catch (Exception e) { e.printStackTrace(); } } } /** * 关闭bufferReader * * @param br */ public static void closeReader(Reader br) { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 关闭Writer * * @param br */ public static void closeWriter(Writer wr) { if (wr != null) { try { wr.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * flush Writer * * @param br */ public static void flushWriter(Writer wr) { if (wr != null) { try { wr.flush(); } catch (IOException e) { e.printStackTrace(); } } } /** * 输入流的关闭 * * @param in */ public static void closeInputStream(InputStream in) { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 输出流的关闭 * * @param out */ public static void closeOutputStream(OutputStream out) { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 文件管道的关闭 * * @param in */ public static void closeFileChannel(FileChannel chl) { if (chl != null) { try { chl.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * RandomAccessFile的关闭 * * @param f RandomAccessFile对象 */ public static void closeRandomAccessFile(RandomAccessFile f) { if (f != null) { try { f.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * Socket的关闭 * * @param s Socket对象 */ public static void colseSocket(Socket s) { if (s != null) { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * LocalSocket的关闭 * * @param s Socket对象 */ public static void colseLocalSocket(LocalSocket s) { if (s != null) { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * toast提示 * * @param message */ public static void openToast(String message) { Toast toast = Toast.makeText(GTApp.getContext(), message, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } public static void deleteFile(File file) { if (file.exists()) { // 判断文件是否存在 if (file.isFile()) { // 判断是否是文件 file.delete(); // delete()方法 你应该知道 是删除的意思; } else if (file.isDirectory()) { // 否则如果它是一个目录 File files[] = file.listFiles(); // 声明目录下所有的文件 files[]; for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件 deleteFile(files[i]); // 把每个文件 用这个方法进行迭代 } } file.delete(); } else { openToast("文件不存在!" + "n"); } } /** * 拷贝文件 * * @param s 源文件 * @param t 目标文件 */ public static void copyFile(File s, File t) { FileInputStream fi = null; FileOutputStream fo = null; FileChannel in = null; FileChannel out = null; try { if (! t.exists()) { t.createNewFile(); } fi = new FileInputStream(s); fo = new FileOutputStream(t); in = fi.getChannel(); out = fo.getChannel(); // 连接两个通道,并且从in通道读取,然后写入out通道 in.transferTo(0, in.size(), out); } catch (IOException e) { e.printStackTrace(); } finally { closeOutputStream(fo); closeInputStream(fi); closeFileChannel(in); closeFileChannel(out); } } public static void copyInputToFile(InputStream in, String path) { BufferedInputStream bis = null; FileOutputStream fos = null; try { byte[] buffer = new byte[10 * 1024]; bis = new BufferedInputStream(in); fos = new FileOutputStream(path); int a = bis.read(buffer, 0, buffer.length); while (a != -1) { fos.write(buffer, 0, a); fos.flush(); a = bis.read(buffer, 0, buffer.length); } } catch (Exception e) { e.printStackTrace(); } finally { closeOutputStream(fos); closeInputStream(bis); closeInputStream(in); } } }