我需要在我的App文件夹中获取文件的文件名,但它提出了整个路径/ storage / emulated / 0 / AppFolder / file1.pdf。如何才能让File.pdf显示而不是整个路径。请指教
ArrayList<File> files = new ArrayList<File>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
File file[] = Environment.getExternalStoragePublicDirectory("/AppFolder").listFiles();
recursiveFileFind(file);
setListAdapter(new ArrayAdapter<File>(ViewInspection.this,
android.R.layout.simple_list_item_1, files));
Toast.makeText(this, "" + files.size(), Toast.LENGTH_LONG).show();
}
public void recursiveFileFind(File[] file1) {
int i = 0;
String filePath = "";
if (file1 != null) {
while (i != file1.length) {
filePath = file1[i].getAbsolutePath();
files.add(file1[i]);
if (file1[i].isDirectory()) {
File file[] = file1[i].listFiles();
recursiveFileFind(file);
}else{
}
i++;
Log.d(i + "", filePath);
}
}
}}
答案 0 :(得分:0)
使用File.getName()而不是File.getAbsolutePath()
while (i != file1.length) {
filePath = file1[i].getName();// here
files.add(file1[i].getName());//Updated here
if (file1[i].isDirectory()) {
File file[] = file1[i].listFiles();
recursiveFileFind(file);
}
i++;
//Log.d(i + "", filePath);
//Update
Toast.makeText(getActivity(), filePath, Toast.LENGTH_LONG).show();
}
答案 1 :(得分:0)
将File的文件arraylist更改为String的arraylist。更改以下
ArrayList<String> files = new ArrayList<String>();//Updated
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
File file[] = Environment.getExternalStoragePublicDirectory("/AppFolder").listFiles();
recursiveFileFind(file);
setListAdapter(new ArrayAdapter<String>(ViewInspection.this,//Updated
android.R.layout.simple_list_item_1, files));
Toast.makeText(this, "" + files.size(), Toast.LENGTH_LONG).show();
}
答案 2 :(得分:0)
这里的问题:
您创建File
的适配器,默认情况下ArrayAdapter
将使用其包含的对象的.toString()
(在本例中为File)。
.toString()
的{{1}}是
File
public String toString() {
return getPath();
}
将返回抽象路径名。
getPath
由于您想获得名称,解决方案可能会有所不同。使用 * Converts this abstract pathname into a pathname string. The resulting
* string uses the {@link #separator default name-separator character} to
* separate the names in the name sequence.
*
* @return The string form of this abstract pathname
代替<String>
的速度越快,编辑代码为:
<File>
但是,如果您想从filePath = file1[i].getAbsolutePath();
files.add(file1[i].getName());
获取File
实例,此解决方案无法帮助您。
你可以:
创建类似&#34;包装器&#34; class,它将包含有关文件的信息,并有一个覆盖ArrayAdapter
,它将打印文件名。
包装类如:
.toString()
然后使用public static class FileWrapper {
private final File file;
private final String fileName;
public FileWrapper(File file)
{
this.file = file;
this.fileName = file.getName();
}
public File getFile() { return file; }
@Override
public String toString()
{
return fileName;
}
}
,您将获得正确的名称,并使用<FileWrapper>
来获取文件实例。 警告我使用了getItem(position).getFile()
,因为如果您将此类声明为内部类,我认为会更好,但如果您不删除static
创建static
(或ArrayAdapter
的子类,我更喜欢但是)并覆盖BaseAdapter
以满足您的需求。我没有尝试过这个解决方案,但我发现它有点困难,因为你应该保存inflater,使用的资源然后膨胀和编辑文本。
如果你只关心&#34;显示文件名&#34;,你可以进行第一次编辑,你没事。