2013-03-08 20 views
0

目前我可以將文本文件加載到EditText中。如果文本被改變,並且用戶試圖打開一個新文件,「先保存?」對話框顯示。我遇到的問題是不保存它保存在要打開的文件上的工作文件(currentFile)。如何更改代碼以正確保存文件(如果存在)?

我哪裏錯了?

File currentFile; 
public boolean changed; 
public boolean exists; 
    ... 

       private void openFile(final File aFile){ 
        String nullChk = et.getText().toString(); 
        exists = true; 

       if(!changed || nullChk.matches("")){ 
        try { 
          et.setText(new Scanner(aFile).useDelimiter("\\Z").next()); 
          changed=false; 
          } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
          e.printStackTrace(); 
          } 
        }else{ 
         AlertDialog.Builder alert = new AlertDialog.Builder(this); 

         alert.setTitle("Save first?"); 
         alert.setMessage("(Will be saved in the current working directory)"); 

         alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
         String temptxt = et.getText().toString(); 

         if(exists){ 
          saveFile(aFile.getPath(), temptxt); 
         }else{ 
          saveAs(); 
         } 
          } 
         }); 
         final File tempFile = aFile; 
         alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton) { 
           try { 
            et.setText(new Scanner(tempFile).useDelimiter("\\Z").next()); 
           } catch (FileNotFoundException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           } 
          changed=false; 
          } 
         }); 

         alert.show(); 
         //currentFile = aFile; 
        } 
       } 

       private void saveFile(String sFileName, String sBody){ 
        //Toast.makeText(this, exists +"", Toast.LENGTH_SHORT).show(); 
        if (exists) { 
         try { 
          File tempfile = new File(sFileName); 
          FileWriter writer = new FileWriter(tempfile); 
          writer.write(sBody); 
          writer.flush(); 
          writer.close(); 
          changed=false; 
          Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show(); 
          return; 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        }else{ 
         Toast.makeText(this, "Save as", Toast.LENGTH_SHORT).show(); 
         saveAs(); 
        } 

       } 

       private void saveAs(){ 
        AlertDialog.Builder alert = new AlertDialog.Builder(this); 

        alert.setTitle("Save as"); 
        alert.setMessage("(Will be saved in the current working directory)"); 

        // Set an EditText view to get user input 
        final EditText input = new EditText(this); 
        alert.setView(input); 

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         String value = input.getText().toString(); 
         String tmpText = et.getText().toString(); 

         try { 
         File tempfile = new File(currentDirectory, value); 
         FileWriter writer = new FileWriter(tempfile); 
          writer.write(tmpText); 
          writer.flush(); 
          writer.close(); 
          changed=false; 
          fill(currentDirectory.listFiles()); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
        e.printStackTrace(); 
        } 
         } 
        }); 

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          startActivityForResult(new Intent(MainActivity.this, NewFile.class),1); 
          dialog.dismiss(); 
        } 
        }); 
        alert.show(); 
       } 

回答

1

我想你使用相同的文件來打開和保存文件。

當您在使用å文件作爲參數openFile(final File aFile)

et.setText(new Scanner(aFile).useDelimiter("\\Z").next()); 

saveFile(aFile.getPath(), temptxt);使用å文件打開的文件。

+0

確實就是這樣。我嘗試使用saveFile(currentFile.getPath(),temptxt);之前,但忘記更改et.setText(新掃描儀(aFile).useDelimiter(「\\ Z」)。next()); et.setText(new Scanner(currentFile).useDelimiter(「\\ Z」)。next()); – RapsFan1981 2013-03-09 15:28:44

相關問題