Android DeleteFile.IllegalArgumentException
我是初学者,如果这个问题太愚蠢,我道歉。我尝试创建一个文件管理器。我想用AlertDialog实现删除文件,但是由于我的努力没有成功。我发布了我的最后一个代码。当我确认删除时,出现一个错误:794-794/standardAndroid.ru.filemanagerAndroid DeleteFile.IllegalArgumentException,android,listview,illegalargumentexception,Android,Listview,Illegalargumentexception,我是初学者,如果这个问题太愚蠢,我道歉。我尝试创建一个文件管理器。我想用AlertDialog实现删除文件,但是由于我的努力没有成功。我发布了我的最后一个代码。当我确认删除时,出现一个错误:794-794/standardAndroid.ru.filemanager E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.IllegalArgumentException: File /d contains a path separator
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalArgumentException: File /d contains a path separator
at android.app.ContextImpl.makeFilename(ContextImpl.java:1672)
at android.app.ContextImpl.deleteFile(ContextImpl.java:671)
at android.content.ContextWrapper.deleteFile(ContextWrapper.java:170)
at standandroid.ru.filemanager.MainActivity$2$1.onClick(MainActivity.java:134)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
我知道演播室说我的参数有错误,但我不明白为什么他们错了……提前谢谢
public class MainActivity extends Activity implements AdapterView.OnItemClickListener {
private String path;
private String selectedItem;
private final Context context=this;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView)findViewById(R.id.list);
listView.setOnItemClickListener(this);
final ListView finalListView = listView;
path = "/";
if (getIntent().hasExtra("path")) {
path = getIntent().getStringExtra("path");
}
setTitle(path);
// Read all files sorted into the values-array
List values = new ArrayList();
File dir = new File(path);
if (!dir.canRead()) {
setTitle(getTitle() + " (inaccessible)");
}
String[] list = dir.list();
if (list != null) {
for (String file : list) {
if (!file.startsWith(".")) {
values.add(file);
}
}
}
Collections.sort(values);
// Put the data into the list
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_2, android.R.id.text1, values);
listView = (ListView)findViewById(R.id.list);
listView.setAdapter(adapter);
AdapterView.OnItemLongClickListener itemLongClickListener=new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
selectedItem=parent.getItemAtPosition(position).toString();
final String filename = (String) finalListView.getAdapter().getItem(position);
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setMessage("Вы хотите удалить"+selectedItem+"?");
builder.setCancelable(false);
builder.setPositiveButton("Да", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
deleteFile(path+filename);
}
});
builder.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
return true;
}};
listView.setOnItemLongClickListener(itemLongClickListener);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListView listView = (ListView)findViewById(R.id.list);
String filename = (String) listView.getAdapter().getItem(position);
if (path.endsWith(File.separator)) {
filename = path + filename;
} else {
filename = path + File.separator + filename;
}
if (new File(filename).isDirectory()) {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("path", filename);
startActivity(intent);
} else {
Toast.makeText(this, filename + " is not a directory", Toast.LENGTH_LONG).show();
}
}}
公共类MainActivity扩展活动实现AdapterView.OnItemClickListener{
私有字符串路径;
私有字符串selectedItem;
私有最终上下文=此;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView ListView=(ListView)findViewById(R.id.list);
setOnItemClickListener(this);
最终ListView finalListView=ListView;
path=“/”;
if(getIntent().hasExtra(“路径”)){
path=getIntent().getStringExtra(“路径”);
}
设置标题(路径);
//读取排序到值数组中的所有文件
列表值=新的ArrayList();
文件目录=新文件(路径);
如果(!dir.canRead()){
setTitle(getTitle()+“(不可访问)”;
}
String[]list=dir.list();
如果(列表!=null){
用于(字符串文件:列表){
如果(!file.startsWith(“.”){
添加(文件);
}
}
}
集合。排序(值);
//将数据放入列表中
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_2,android.R.id.text1,值);
listView=(listView)findViewById(R.id.list);
setAdapter(适配器);
AdapterView.OnItemLongClickListener项LongClickListener=新AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
selectedItem=parent.getItemAtPosition(position.toString();
最终字符串文件名=(字符串)finalListView.getAdapter().getItem(位置);
AlertDialog.Builder=新建AlertDialog.Builder(上下文);
建造商设置消息(“选择项+”);
builder.setCancelable(false);
builder.setPositiveButton(“аа”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
删除文件(路径+文件名);
}
});
builder.setNegativeButton(“цц”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.cancel();
}
});
builder.show();
返回true;
}};
setOnItemLongClickListener(itemLongClickListener);
}
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
ListView ListView=(ListView)findViewById(R.id.list);
字符串文件名=(字符串)listView.getAdapter().getItem(位置);
if(path.endsWith(File.separator)){
文件名=路径+文件名;
}否则{
filename=path+File.separator+filename;
}
if(新文件(文件名).isDirectory()){
意向意向=新意向(此,MainActivity.class);
intent.putExtra(“路径”,文件名);
星触觉(意向);
}否则{
Toast.makeText(这个文件名+“不是目录”,Toast.LENGTH_LONG.show();
}
}}
deleteFile函数不能采用路径,它只能采用不带分隔符的文件名(假定采用该路径)。要删除完整路径,请为其创建一个文件对象并通过该对象删除它。我还尝试使用public void DeleteRecursive(字符串文件名){File File File=new File(文件名);if(!File.exists())return;if(!File.isDirectory()){File.delete();return;}String[]files=file.list();for(int i=0;i