2016-05-22 32 views
0

我正在使用此方法將具有更改信息的文件複製到新文件。 我只是附上了這個代碼(按預期工作),以防我的無知超出了我的期望。Java使用renameTo(file)方法重命名文件

public void Writedevices(String Start)throws IOException{ 
       File S = null; 
       File D = null; 
       BufferedReader reader = null; 
       String line; 
       BufferedWriter writer = null; 
       PrintWriter Newfile = new PrintWriter("Destination.txt","UTF-8"); 
       int i=0; 
       try{ 
         S = new File(Start); 
         D = new File("Destination.txt"); 
        } 
        catch (NullPointerException e){ 
        System.err.println("File not found."); 
        } 

       try{ 
        reader = new BufferedReader(new FileReader(S)); 
        writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(D), "utf-8")); 
        line = reader.readLine(); 
        while(line != null){ 
         if(!line.toLowerCase().contains("pieces")){ 
          writer.write(line); 
          writer.append(System.getProperty("line.separator")); 
         } 
         else{ 
          writer.write("   PIECES "+Availability.get(i)); 
          writer.append(System.getProperty("line.separator")); 
          i++; 
         } 
         line=reader.readLine(); 
        } 
       } 
       catch (FileNotFoundException e){ 
       System.err.println("Error opening file!"); 
       } 
       finally{ 
        writer.close(); 
        reader.close(); 
       } 

這是我遇到問題的地方。起始文件刪除,但最終正確更改的文件未按預期重命名。

S.delete(); 
       File Name = new File("Available_Devices.txt"); 
       if(D.renameTo(Name)){ 
       System.out.println("Device list availability update succesfull."); 
         } 
      } 
+0

正如您所描述的,您希望將源文件重命名爲Destination.txt,但它會重命名爲Available_Devices.txt?我的理解是真的嗎? –

+0

如果我是真的,只要刪除這些if語句if(D.renameTo(Name)){'和文件仍然是'Destination.txt',因爲您希望在這一行中有'D = new File(「Destination.txt」 );' –

+0

@rahmatwaisi它應該將文件重命名爲Available_Devices。即使沒有if語句,重命名也不會發生。 –

回答

0

我可以確認的是,當執行結果與下面的代碼:

  • "Source.txt"文件被刪除
  • "Destination.txt"被創建和包含的字符如預期
  • "Destination.txt"被重新命名爲"Available_Devices.txt"保持所有其數據完好

如果這在你的系統上沒有描述過,請檢查你的java程序是否有權對這些文件進行所需的操作(如果你在linux上,試着用sudo運行你的程序? )

如果您的問題不同,請詳細描述。

package tempProject; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 

public class FileTransformer2 { 
    public static void main(String[] args) { 
     try { 
      Writedevices("Source.txt"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void Writedevices(String Start) throws IOException { 
     File S = null; 
     File D = null; 
     BufferedReader reader = null; 
     String line; 
     BufferedWriter writer = null; 
     int i = 0; 
     try { 
      S = new File(Start); 
      D = new File("Destination.txt"); 
     } catch (NullPointerException e) { 
      System.err.println("File not found."); 
     } 

     try { 
      reader = new BufferedReader(new FileReader(S)); 
      writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(D), "utf-8")); 
      line = reader.readLine(); 
      while (line != null) { 
       if (!line.toLowerCase().contains("pieces")) { 
        writer.write(line); 
        writer.append(System.getProperty("line.separator")); 
       } else { 
        // writer.write(" PIECES "+Availability.get(i)); 
        writer.append(System.getProperty("line.separator")); 
        i++; 
       } 
       line = reader.readLine(); 
      } 

     } catch (FileNotFoundException e) { 
      System.err.println("Error opening file!"); 
     } finally { 
      writer.close(); 
      reader.close(); 

     } 

     S.delete(); 
     File Name = new File("Available_Devices.txt"); 
     if(D.renameTo(Name)){ 
     System.out.println("Device list availability update succesfull."); 
       } 


    } 
} 
+0

這正是問題所在!感謝您花時間回覆我的帖子。我如何檢查java是否具有所需的權限,或者更確切地說,我應該如何更改我的程序,以便它能夠緩衝這些文件?再次,非常感謝! –

+0

你是什麼意思的「是」?你是否設法解決它?怎麼樣?你有什麼操作系統? – foivaras

相關問題