package com.github.catvod.utils; import android.os.Environment; import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.spider.Init; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Path { private static File mkdir(File file) { if (!file.exists()) file.mkdirs(); return file; } public static File download() { return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); } public static File root() { return Environment.getExternalStorageDirectory(); } public static File cache() { return Init.context().getCacheDir(); } public static File files() { return Init.context().getFilesDir(); } public static File tv() { return mkdir(new File(root() + File.separator + "TV")); } public static File cache(String path) { return mkdir(new File(cache(), path)); } public static File tv(String name) { if (!name.startsWith(".")) name = "." + name; return new File(tv(), name); } public static String read(File file) { try { return read(new FileInputStream(file)); } catch (Exception e) { return ""; } } public static String read(InputStream is) { try { byte[] data = new byte[is.available()]; is.read(data); is.close(); return new String(data, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); return ""; } } public static File write(File file, String data) { return write(file, data.getBytes()); } public static File write(File file, byte[] data) { try { FileOutputStream fos = new FileOutputStream(create(file)); fos.write(data); fos.flush(); fos.close(); return file; } catch (Exception ignored) { return file; } } public static void copy(File in, File out) { try { copy(new FileInputStream(in), out); } catch (Exception ignored) { } } public static void copy(InputStream in, File out) { try { int read; byte[] buffer = new byte[8192]; FileOutputStream fos = new FileOutputStream(create(out)); while ((read = in.read(buffer)) != -1) fos.write(buffer, 0, read); fos.close(); in.close(); } catch (Exception ignored) { } } public static void move(File in, File out) { copy(in, out); clear(in); } public static void clear(File dir) { if (dir == null) return; if (dir.isDirectory()) for (File file : list(dir)) clear(file); if (dir.delete()) SpiderDebug.log("Deleted:" + dir.getAbsolutePath()); } public static List list(File dir) { File[] files = dir.listFiles(); return files == null ? Collections.emptyList() : Arrays.asList(files); } public static File create(File file) throws Exception { try { if (file.getParentFile() != null) mkdir(file.getParentFile()); if (!file.canWrite()) file.setWritable(true); if (!file.exists()) file.createNewFile(); Shell.exec("chmod 777 " + file); return file; } catch (Exception e) { e.printStackTrace(); return file; } } }