Java 从.txt文件中删除特定行

Java 从.txt文件中删除特定行,java,android,eclipse,Java,Android,Eclipse,我正在尝试从存储在android手机上的.txt文件中删除一行。这就是我试图做到的: public void removeLineFrom (String filePath, String lineToRemove){ try { File oldFile = new File(filePath); File tempFile = new File(externalStoragePath + File.separator + "/Android/d

我正在尝试从存储在android手机上的.txt文件中删除一行。这就是我试图做到的:

public void removeLineFrom (String filePath, String lineToRemove){
    try {
          File oldFile = new File(filePath);
          File tempFile = new File(externalStoragePath + File.separator + "/Android/data/com.whizzappseasyvoicenotepad/temp file.txt");

          BufferedReader br = new BufferedReader(new FileReader(filePath));
          PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

          String line = null;

          //Read from the original file and write to the new
          //unless content matches data to be removed.
          while ((line = br.readLine()) != null) {

            if (!line.equals(lineToRemove)) {

              pw.write(line);
              pw.flush();
            }
          }
          pw.close();
          br.close();

          //Delete the original file
          oldFile.delete();

          //Rename the new file to the filename the original file had.
          tempFile.renameTo(recordedFiles);

        }
        catch (FileNotFoundException ex) {
          ex.printStackTrace();
        }
        catch (IOException ex) {
          ex.printStackTrace();
        }
}
每次我这样调用此方法时:

removeLineFrom(externalStoragePath + File.separator + 
    "/Android/data/com.whizzappseasyvoicenotepad/recorded files.txt", 
    recordedFilesArray.get(toDelete));
应用程序崩溃了。这是logcat错误:

08-08 15:24:22.225: E/AndroidRuntime(6146): java.lang.IndexOutOfBoundsException: 
    Invalid index 1, size is 1
它说问题出在上面的一行(调用方法)。我不知道为什么索引会无效。这是toDelete变量:

toDelete = arg2;
如果有人需要,请长按:

listView.setOnItemLongClickListener(new OnItemLongClickListener(){

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            deleteAlert.setTitle("Warning");
            deleteAlert.setMessage("Are you sure you want to delete this?");
            toDelete = arg2;
            deleteAlert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    File directory = new File (externalStoragePath + File.separator + "Android/data/com.whizzappseasyvoicenotepad/");
                    File deleteFile = new File (directory, recordedFilesArray.get(toDelete) + ".mp3");
                    deleteFile.delete();
                    Log.i("TAG", "Deleting file: " + directory + recordedFilesArray.get(toDelete) + ".mp3");

                    listAdapter.remove(listAdapter.getItem(toDelete));
                    listAdapter.notifyDataSetChanged();

                    removeLineFrom(externalStoragePath + File.separator + "/Android/data/com.whizzappseasyvoicenotepad/recorded files.txt", recordedFilesArray.get(toDelete));

                    Toast toast = Toast.makeText(getApplicationContext(), "Deleted", Toast.LENGTH_SHORT);
                    toast.show();

                    dialog.dismiss();
                }
            });

            deleteAlert.setNegativeButton("No", null);
            deleteAlert.show();
            return false;
        }

    });
listView.setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
长单击(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
deleteAlert.setTitle(“警告”);
deleteAlert.setMessage(“是否确实要删除此?”);
toDelete=arg2;
deleteAlert.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
文件目录=新文件(externalStoragePath+File.separator+“Android/data/com.whizzappseasyvoicenotepad/”;
File deleteFile=新文件(目录,recordedFilesArray.get(toDelete)+“.mp3”);
deleteFile.delete();
Log.i(“标记”,“删除文件:”+directory+recordedFilesArray.get(toDelete)+.mp3”);
移除(listAdapter.getItem(toDelete));
listAdapter.notifyDataSetChanged();
从(externalStoragePath+File.separator+“/Android/data/com.whizzappseasyvoicenotepad/recorded files.txt”、recordedFilesArray.get(toDelete))中删除行;
Toast Toast=Toast.makeText(getApplicationContext(),“Deleted”,Toast.LENGTH\u SHORT);
toast.show();
dialog.dismise();
}
});
deleteAlert.setNegativeButton(“否”,null);
deleteAlert.show();
返回false;
}
});

如果数组的大小为1,而您的索引为1,则正如上面所说的,它超出了范围。数组从索引0开始。

您的
recordedFilesArray
只有一个元素,但您试图获取第二个元素,数组索引从0开始。

问题在于:

listAdapter.remove(listAdapter.getItem(toDelete));
listAdapter.notifyDataSetChanged();

removeLineFrom(externalStoragePath + File.separator + "/Android/data/com.whizzappseasyvoicenotepad/recorded files.txt", recordedFilesArray.get(toDelete));

在调用方法之前,您正在从数组中删除arg2,这就是为什么在调用方法时,arg2(toDelete)不再存在的原因。要使其工作,只需在从listAdapter中删除项之前调用您的方法(removeLineFrom)

查看此答案谢谢!现在效果很好!