Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
制作临时文件并在Android内存中重命名_Android_Io_Fileinputstream_Fileoutputstream - Fatal编程技术网

制作临时文件并在Android内存中重命名

制作临时文件并在Android内存中重命名,android,io,fileinputstream,fileoutputstream,Android,Io,Fileinputstream,Fileoutputstream,我有一个.txt文件,其中包含 1;2;3;4;5 a;b;c;d;e A;B;C;D;E 我想去掉以“a”开头的那一行 我复制了一份文件,并在那里写下行,除非行等于要移动的行 这是我做的但文件没有改变 String path = "playlist.txt" String lineToRemove = "a"; public boolean removeLineFromFile(String lineToRemove) { try { File inFile = new

我有一个.txt文件,其中包含

1;2;3;4;5
a;b;c;d;e
A;B;C;D;E
我想去掉以“a”开头的那一行 我复制了一份文件,并在那里写下行,除非行等于要移动的行

这是我做的但文件没有改变

String path = "playlist.txt"
String lineToRemove = "a";



public boolean removeLineFromFile(String lineToRemove) {  


try {
    File inFile = new File(path);
    //Creating a temp file
    File tempFile = new File(inFile.getAbsolutePath()+".tmp");

    FileInputStream fIn = openFileInput(path);
    InputStreamReader isr = new InputStreamReader(fIn);
    BufferedReader br = new BufferedReader(isr);                    

    FileOutputStream fOut_temp = openFileOutput(path +".tmp", Context.MODE_APPEND);
    OutputStreamWriter osw_temp = new OutputStreamWriter(fOut_temp);
    osw_temp.write("");

    String line = br.readLine();

    //Read from the original file and write to the new
    //unless content matches data to be removed.
    while (line != null) {
        String[] tokens = line.split(";");
        if (! tokens[0].equals(lineToRemove)){
            osw_temp.write(line);
            osw_temp.flush();
        }
        line = br.readLine();
     }

    osw_temp.close();
    br.close();               

    //Delete the original file   
    inFile.delete();
    //Rename the new file to the filename the original file had.
    tempFile.renameTo(inFile);  
    return true;              
}catch (Exception ex) { return false;}  
我认为使用文件有一个问题,在安卓内部存储上有其他的书写方式吗? 提前谢谢你的帮助

编辑:因为使用File=newfile+rename+deleted方法在这里不起作用,这是我找到的解决方案。也许不是最好的,但至少它是有效的

try {   

     FileInputStream fIn = openFileInput(path);
     InputStreamReader isr = new InputStreamReader(fIn);
     BufferedReader br = new BufferedReader(isr);  

     //Create temp file 
    FileOutputStream fOut2 = openFileOutput("te.txt", Context.MODE_WORLD_WRITEABLE);
    OutputStreamWriter osw2 = new OutputStreamWriter(fOut2);

    osw2.write("");
    // save and close
    osw2.flush();
    osw2.close();

    // Adding things to temp file
    FileOutputStream fOut_temp = openFileOutput("te.txt", Context.MODE_APPEND);
     OutputStreamWriter osw_temp = new OutputStreamWriter(fOut_temp);
     osw_temp.write("");

      String line = br.readLine();


      //Read from the original file and write to the new
      //unless content matches data to be removed.
      while (line != null) {
        String[] tokens = line.split(";");
        if (! tokens[0].equals(lineToRemove)){
          osw_temp.write(line);
          osw_temp.write("\r\n");
          osw_temp.flush();
        }
        line = br.readLine();
      }

      osw_temp.close();
      br.close();


      //Delete the original file  
    FileOutputStream fOut = openFileOutput(path, Context.MODE_WORLD_WRITEABLE);
    OutputStreamWriter osw = new OutputStreamWriter(fOut);          
    osw.write("");
    // save and close
    osw.flush();
    osw.close();

    //Copy temp file to original file

      FileInputStream fIn3 = openFileInput("te.txt");
     InputStreamReader isr3 = new InputStreamReader(fIn3);
     BufferedReader br2 = new BufferedReader(isr3);
    String line4 = br2.readLine() ;

   FileOutputStream fOut_temp4 = openFileOutput(path, Context.MODE_APPEND);
   OutputStreamWriter osw_temp4 = new OutputStreamWriter(fOut_temp4);

      while (line4 != null) {

          osw_temp4.write(line4);
          osw_temp4.write("\r\n");
          osw_temp4.flush();
            Toast.makeText(getApplicationContext(),"ecrit", Toast.LENGTH_SHORT).show();

        line4 = br2.readLine();
      }

      osw_temp4.close();
      br2.close();

      return true;            
    }catch (Exception ex) {                 
        Toast.makeText(getApplicationContext(),ex.getMessage(), Toast.LENGTH_SHORT).show();
    return false;}        

}

通过使用Java,我可以删除以Android中的一个端口开始的行,就是这样

public class LineRemover
{
static String path = "temp.txt";
    static String lineToRemove = "a";
    public static void main(String[] args)
    {
            try {
                File inFile = new File(path);

                FileInputStream fIn = new FileInputStream(path);
                InputStreamReader isr = new InputStreamReader(fIn);
                BufferedReader br = new BufferedReader(isr);                    

                FileOutputStream fOut_temp = new FileOutputStream("te.txt");
                OutputStreamWriter osw_temp = new OutputStreamWriter(fOut_temp);
                osw_temp.write("");

                String line = br.readLine();

                //Read from the original file and write to the new
                //unless content matches data to be removed.
                while (line != null) {
                    String[] tokens = line.split(";");
                    if (! tokens[0].equals(lineToRemove)){
                        osw_temp.write(line);
                        osw_temp.flush();
                    }
                    line = br.readLine();
                 }

                osw_temp.close();
                br.close();               

                inFile.delete();
            inFile = new File("te.txt");
            //Rename the new file to the filename the original file had.
            inFile.renameTo(new File("temp.txt"));  
            }catch (Exception ex) 
            {}
        }
}

为什么要在文件名中添加
.tmp
?也许这篇文章可以回答您的问题@hotweryspicy:要创建临时文件,我尝试添加文件tempFile=newFile(“te.txt”);tempFile.renameTo(infle);在代码的末尾,但它也不起作用。最后我必须拥有的是同一个文件,带有removedEDIT行:在pc上工作很好,但我发现在android上你不能使file infle=new file(path);这是个例外