实现获取文件md5码的功能,使用到的库是:implementation group: 'commons-codec', name: 'commons-codec', version: '1.15'

master
ThankVinci 4 years ago
parent d1ceca0205
commit d3948d704d

@ -35,6 +35,7 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.navigation:navigation-fragment:2.2.2' implementation 'androidx.navigation:navigation-fragment:2.2.2'
implementation 'androidx.navigation:navigation-ui:2.2.2' implementation 'androidx.navigation:navigation-ui:2.2.2'
implementation group: 'commons-codec', name: 'commons-codec', version: '1.15'
testImplementation 'junit:junit:4.+' testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

@ -15,6 +15,10 @@ import androidx.recyclerview.widget.RecyclerView;
import com.thankvinci.CloudKey.Fragment.FileManageFragment; import com.thankvinci.CloudKey.Fragment.FileManageFragment;
import com.thankvinci.CloudKey.R; import com.thankvinci.CloudKey.R;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List; import java.util.List;
public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> { public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {
@ -51,19 +55,28 @@ public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {
int position = holder.getAdapterPosition(); int position = holder.getAdapterPosition();
FileItem fitem = fileList.get(position); FileItem fitem = fileList.get(position);
//Toast.makeText(v.getContext(),fitem.getName(),Toast.LENGTH_SHORT).show(); //Toast.makeText(v.getContext(),fitem.getName(),Toast.LENGTH_SHORT).show();
if(fitem.isDir()){
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append(((FileManageFragment)fragment).getDir()); builder.append(((FileManageFragment)fragment).getDir());
builder.append("/"); builder.append("/");
builder.append(fitem.getName()); builder.append(fitem.getName());
if(fitem.isDir()){
data.putString("dir",builder.toString()); data.putString("dir",builder.toString());
data.putBoolean("isRoot",false); data.putBoolean("isRoot",false);
Toast.makeText(v.getContext(),data.getString("dir"),Toast.LENGTH_SHORT).show(); //Toast.makeText(v.getContext(),data.getString("dir"),Toast.LENGTH_SHORT).show();
Navigation.findNavController(v).navigate(R.id.action_openDir,data); Navigation.findNavController(v).navigate(R.id.action_openDir,data);
}else{
//Toast.makeText(v.getContext(),fitem.getName()+" "+fitem.isCompress(),Toast.LENGTH_SHORT).show();
if (fitem.isCompress()){
try {
String filemd5 = DigestUtils.md5Hex(new FileInputStream(builder.toString()));
Toast.makeText(v.getContext(),"MD5码为:\n"+filemd5,Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}
}else{ }else{
Toast.makeText(v.getContext(),"没有打开除文件夹和压缩包以外的功能",Toast.LENGTH_SHORT).show(); Toast.makeText(v.getContext(),"没有打开除文件夹和压缩包以外的功能",Toast.LENGTH_SHORT).show();
} }
}
} }
}); });

@ -13,6 +13,7 @@ public class FileItem {
public FileItem(String name, boolean type, boolean isZip){ public FileItem(String name, boolean type, boolean isZip){
this.type = type; this.type = type;
this.name = name; this.name = name;
this.isZip = isZip;
if(type){ if(type){
if(isZip){ if(isZip){
icon = R.drawable.zip; icon = R.drawable.zip;
@ -32,7 +33,7 @@ public class FileItem {
public boolean isDir(){ public boolean isDir(){
return !type; return !type;
} }
public boolean isZip(){ public boolean isCompress(){
return isZip; return isZip;
} }
} }

@ -55,6 +55,8 @@ public class FileManageFragment extends Fragment {
dir = data.getString("dir"); dir = data.getString("dir");
Toast.makeText(getActivity(),dir,Toast.LENGTH_SHORT).show(); Toast.makeText(getActivity(),dir,Toast.LENGTH_SHORT).show();
} }
path_edit.setText(dir);
path_edit.setSelection(dir.length());
loadDirectory(); loadDirectory();
} }
public String getDir(){ public String getDir(){
@ -64,7 +66,6 @@ public class FileManageFragment extends Fragment {
ActivityCompat.requestPermissions(getActivity(), new String[]{ //运行时权限 ActivityCompat.requestPermissions(getActivity(), new String[]{ //运行时权限
"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"}, 1); "android.permission.READ_EXTERNAL_STORAGE"}, 1);
path_edit.setText(dir);
File directory = new File(dir); File directory = new File(dir);
files = directory.listFiles(); files = directory.listFiles();
if (files == null){ if (files == null){
@ -84,7 +85,6 @@ public class FileManageFragment extends Fragment {
for(int i = 0;i < files.length;i++){ for(int i = 0;i < files.length;i++){
filename = files[i].getName(); filename = files[i].getName();
isFile = files[i].isFile(); isFile = files[i].isFile();
index = filename.indexOf(".");
if (isFile){ if (isFile){
lastIndex = filename.lastIndexOf("."); lastIndex = filename.lastIndexOf(".");
if(lastIndex == -1){ if(lastIndex == -1){
@ -100,6 +100,7 @@ public class FileManageFragment extends Fragment {
}else{ }else{
isZip = false; isZip = false;
} }
index = filename.indexOf(".");
if(index != 0){ //隐藏.开头的隐藏文件 if(index != 0){ //隐藏.开头的隐藏文件
FileItem fitem = new FileItem(filename,isFile,isZip); FileItem fitem = new FileItem(filename,isFile,isZip);
fileItemList.add(fitem); fileItemList.add(fitem);

@ -15,6 +15,7 @@
android:textColor="@color/grey" android:textColor="@color/grey"
android:textSize="14dp" android:textSize="14dp"
android:singleLine="true" android:singleLine="true"
android:gravity="left"
tools:ignore="MissingConstraints" /> tools:ignore="MissingConstraints" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView

@ -219,7 +219,7 @@ public static final View.OnClickListener createNavigateOnClickListener(@IdRes in
返回一个OnClickListener,但是我是分文件和目录的,这个方法又不能重写,然后又找到了https://blog.csdn.net/m0_46962786/article/details/109119746这篇文章,这里面是在普通的OnClickListener中获取当前的Navigation的controller,然后调用navigate()方法去触发action和传递参数 返回一个OnClickListener,但是我是分文件和目录的,这个方法又不能重写,然后又找到了https://blog.csdn.net/m0_46962786/article/details/109119746这篇文章,这里面是在普通的OnClickListener中获取当前的Navigation的controller,然后调用navigate()方法去触发action和传递参数
**2021/6/9** **2021/6/11**
将loadRoot和loadDirectory两个方法合并为loadDirectory(),本质上都是加载一个目录 将loadRoot和loadDirectory两个方法合并为loadDirectory(),本质上都是加载一个目录

Loading…
Cancel
Save