2013-03-08 3 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)으로 aFile 변수 사용

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

saveFile(aFile.getPath(), temptxt);

에 aFile 변수를 사용하여 파일 열기.

+0

실제로 그 것이 었습니다. 나는 saveFile (currentFile.getPath(), temptxt)을 사용하여 시도했다; 이전에는 et.setText (새 스캐너 (aFile) .useDelimiter ("\\ Z"). next())를 변경하는 것을 잊었습니다. et.setText (새 스캐너 (currentFile) .useDelimiter ("\\ Z"). next()); – RapsFan1981

관련 문제