实现获取文件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.navigation:navigation-fragment: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.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
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.R;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {
@ -51,18 +55,27 @@ public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {
int position = holder.getAdapterPosition();
FileItem fitem = fileList.get(position);
//Toast.makeText(v.getContext(),fitem.getName(),Toast.LENGTH_SHORT).show();
StringBuilder builder = new StringBuilder();
builder.append(((FileManageFragment)fragment).getDir());
builder.append("/");
builder.append(fitem.getName());
if(fitem.isDir()){
StringBuilder builder = new StringBuilder();
builder.append(((FileManageFragment)fragment).getDir());
builder.append("/");
builder.append(fitem.getName());
data.putString("dir",builder.toString());
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);
}else{
Toast.makeText(v.getContext(),"没有打开除文件夹和压缩包以外的功能",Toast.LENGTH_SHORT).show();
//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{
Toast.makeText(v.getContext(),"没有打开除文件夹和压缩包以外的功能",Toast.LENGTH_SHORT).show();
}
}
}

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

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

@ -15,6 +15,7 @@
android:textColor="@color/grey"
android:textSize="14dp"
android:singleLine="true"
android:gravity="left"
tools:ignore="MissingConstraints" />
<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和传递参数
**2021/6/9**
**2021/6/11**
将loadRoot和loadDirectory两个方法合并为loadDirectory(),本质上都是加载一个目录

Loading…
Cancel
Save