Add files via upload

This commit is contained in:
DXL
2020-08-27 12:38:23 +08:00
committed by GitHub
parent 53a16b0211
commit 9cc206cc95
4 changed files with 955 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
package com.proxgrind.chameleon.utils.stream;
import androidx.annotation.Nullable;
import java.io.Closeable;
import java.io.Flushable;
import java.io.IOException;
public class IOUtils {
public static boolean close(@Nullable Closeable closeable) {
if (closeable == null) return false;
try {
closeable.close();
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public static boolean flush(@Nullable Flushable flushable) {
if (flushable == null) return false;
try {
flushable.flush();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
+85
View File
@@ -0,0 +1,85 @@
package com.proxgrind.chameleon.utils.stream;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
public class LineParseUtils extends Thread {
private String LOG_TAG = this.getClass().getSimpleName();
/*
* 回调接口,当有完整的一行出现时回调!
* */
public interface OnNewLineLisenter {
void onNewLine(String str);
}
//队列,生产消费!
private Queue<Character> mConsoleQueue = new LinkedBlockingQueue<>();
//回调接口!
private OnNewLineLisenter mLisenter;
//标志,是否暂停!
private volatile boolean mPauseLabel = false;
//标志,是否结束!
private volatile boolean mCancelLabel = false;
public LineParseUtils(OnNewLineLisenter lisenter) {
mLisenter = lisenter;
}
@Override
public void run() {
//迭代队列
StringBuilder sb = new StringBuilder(256);
while (!mCancelLabel) {
if (mPauseLabel) {
//Log.d(LOG_TAG, "DynamicLineParseThread is pause!");
continue;
}
if (mConsoleQueue.size() == 0) continue;
if (mLisenter != null) {
Character c;
while ((c = mConsoleQueue.poll()) != null) {
//遇到的是换行符,则需要处理换行符!
if (c == '\n') {
//回调之前的结果!
String s = sb.toString();
//Log.d("****", "DLPU新行: " + s);
//开始回调!
mLisenter.onNewLine(s);
//清除缓存,重新建立对象!
sb = new StringBuilder(256);
//尝试通知GC
System.gc();
//直接跳过下一步的换行符添加!
break;
}
//否则一直追加进缓冲区
sb.append((char) c);
//Log.d("****", "DLPU: " + sb.toString());
}
}
}
}
@Override
public synchronized void start() {
//处理启动相关的实现!
mPauseLabel = false;
if (!isAlive()) {
super.start();
}
}
public synchronized void appendText(Character txt) {
mConsoleQueue.add(txt);
}
public synchronized void pause() {
mPauseLabel = true;
}
public synchronized void cancel() {
mCancelLabel = true;
}
}
+207
View File
@@ -0,0 +1,207 @@
package com.proxgrind.chameleon.utils.stream;
import android.util.Log;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipUtils {
public static final String TAG = "ZIP";
private ZipUtils() {
}
/**
* 解压zip到指定的路径
*
* @param zipFileString ZIP的名称
* @param outPathString 要解压缩路径
* @throws Exception
*/
public static void unZipFolder(String zipFileString, String outPathString) throws Exception {
ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));
ZipEntry zipEntry;
String szName = "";
while ((zipEntry = inZip.getNextEntry()) != null) {
szName = zipEntry.getName();
if (zipEntry.isDirectory()) {
//获取部件的文件夹名
szName = szName.substring(0, szName.length() - 1);
File folder = new File(outPathString + File.separator + szName);
folder.mkdirs();
} else {
Log.e(TAG, outPathString + File.separator + szName);
File file = new File(outPathString + File.separator + szName);
if (!file.exists()) {
Log.e(TAG, "Create the file:" + outPathString + File.separator + szName);
file.getParentFile().mkdirs();
file.createNewFile();
}
// 获取文件的输出流
FileOutputStream out = new FileOutputStream(file);
int len;
byte[] buffer = new byte[1024];
// 读取(字节)字节到缓冲区
while ((len = inZip.read(buffer)) != -1) {
// 从缓冲区(0)位置写入(字节)字节
out.write(buffer, 0, len);
out.flush();
}
out.close();
}
}
inZip.close();
}
public static void unZipFolder(String zipFileString, String outPathString, String szName) throws Exception {
ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));
ZipEntry zipEntry;
while ((zipEntry = inZip.getNextEntry()) != null) {
//szName = zipEntry.getName();
if (zipEntry.isDirectory()) {
//获取部件的文件夹名
szName = szName.substring(0, szName.length() - 1);
File folder = new File(outPathString + File.separator + szName);
folder.mkdirs();
} else {
Log.e(TAG, outPathString + File.separator + szName);
File file = new File(outPathString + File.separator + szName);
if (!file.exists()) {
Log.e(TAG, "Create the file:" + outPathString + File.separator + szName);
file.getParentFile().mkdirs();
file.createNewFile();
}
// 获取文件的输出流
FileOutputStream out = new FileOutputStream(file);
int len;
byte[] buffer = new byte[1024];
// 读取(字节)字节到缓冲区
while ((len = inZip.read(buffer)) != -1) {
// 从缓冲区(0)位置写入(字节)字节
out.write(buffer, 0, len);
out.flush();
}
out.close();
}
}
inZip.close();
}
/**
* 压缩文件和文件夹
*
* @param srcFileString 要压缩的文件或文件夹
* @param zipFileString 压缩完成的Zip路径
* @throws Exception
*/
public static void zipFolder(String srcFileString, String zipFileString, FilenameFilter filter) throws Exception {
//创建ZIP
ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFileString));
//创建文件
File file = new File(srcFileString);
//压缩
zipFiles(file.getParent() + File.separator, file.getName(), outZip, filter);
//完成和关闭
outZip.finish();
outZip.close();
}
/**
* 压缩文件
*
* @param folderString
* @param fileString
* @param zipOutputSteam
* @throws Exception
*/
private static void zipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam, FilenameFilter filter) throws Exception {
if (zipOutputSteam == null)
return;
File file = new File(folderString + fileString);
if (file.isFile()) {
ZipEntry zipEntry = new ZipEntry(fileString);
FileInputStream inputStream = new FileInputStream(file);
zipOutputSteam.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[4096];
while ((len = inputStream.read(buffer)) != -1) {
zipOutputSteam.write(buffer, 0, len);
}
zipOutputSteam.closeEntry();
} else {
//文件夹
String[] fileList = file.list(filter);
if (fileList != null) {
//没有子文件和压缩
if (fileList.length <= 0) {
ZipEntry zipEntry = new ZipEntry(fileString + File.separator);
zipOutputSteam.putNextEntry(zipEntry);
zipOutputSteam.closeEntry();
}
//子文件和递归
for (String s : fileList) {
zipFiles(folderString, fileString + File.separator + s, zipOutputSteam, filter);
}
}
}
}
/**
* 返回zip的文件输入流
*
* @param zipFileString zip的名称
* @param fileString ZIP的文件名
* @return InputStream
* @throws Exception
*/
public static InputStream upZip(String zipFileString, String fileString) throws Exception {
ZipFile zipFile = new ZipFile(zipFileString);
ZipEntry zipEntry = zipFile.getEntry(fileString);
return zipFile.getInputStream(zipEntry);
}
/**
* 返回ZIP中的文件列表(文件和文件夹)
*
* @param zipFileString ZIP的名称
* @param bContainFolder 是否包含文件夹
* @param bContainFile 是否包含文件
* @return
* @throws Exception
*/
public static List<File> getFileList(String zipFileString, boolean bContainFolder, boolean bContainFile) throws Exception {
List<File> fileList = new ArrayList<File>();
ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));
ZipEntry zipEntry;
String szName;
while ((zipEntry = inZip.getNextEntry()) != null) {
szName = zipEntry.getName();
if (zipEntry.isDirectory()) {
// 获取部件的文件夹名
szName = szName.substring(0, szName.length() - 1);
File folder = new File(szName);
if (bContainFolder) {
fileList.add(folder);
}
} else {
File file = new File(szName);
if (bContainFile) {
fileList.add(file);
}
}
}
inZip.close();
return fileList;
}
}