2017-06-05 4 views
0

J'ai un programme qui devrait traiter les fichiers dans le répertoire et si la taille du fichier est plus de 50 octets supprimer. Dans le cas contraire, si la taille du fichier est inférieur programme de 50 octets doit renommer les args [1] fichier au allFilesContent.txt (même répertoire), et d'écrire tous les fichiers à ce fichier, séparés par « n » (110 code ASCII). Mais à la place, le programme crée simplement un autre fichier et écrit dans le tout premier fichier args [1]. Quel est le problème?Au lieu de renommer mon fichier simplement dupliquer

public class Solution 
{ 
    public static void main(String [] args) throws IOException 
    { 
     File path = new File(args[0]); 
     File resultFileAbsolutePath = new File(args[1]); 
     ArrayList<File> allFiles = new ArrayList<>(); 
     boolean isRenamed = false; 

     for(File file : path.listFiles()) 
     { 
      if(file.length() > 50) 
      { 
       FileUtils.deleteFile(file); 
      } 

      else if(file.length() <= 50) 
      { 
       if(!isRenamed) 
       { 
       FileUtils.renameFile(resultFileAbsolutePath, new File(resultFileAbsolutePath.getParent()+"\\allFilesContent.txt")); 
       isRenamed = true; 
       } 
       if(!file.getName().equals(resultFileAbsolutePath.getName())) 
       { 
       allFiles.add(file); 
       } 
      } 
     } 

     Collections.sort(allFiles, new Comparator<File>() 
     { 
      @Override 
      public int compare(File o1, File o2) 
      { 
       return o1.getName().compareTo(o2.getName()); 
      } 
     }); 

     FileOutputStream fileOutputStream = new FileOutputStream(resultFileAbsolutePath, true); 

     for (File file : allFiles) 
     { 
      try(FileInputStream fileInputStream = new FileInputStream(file)) 
      { 
       if(allFiles.indexOf(file) != 0) fileOutputStream.write(110); 
       int data; 
       while(fileInputStream.available() > 0) 
       { 
        data = fileInputStream.read(); 
        fileOutputStream.write(data); 
       } 
      } 
     } 

     fileOutputStream.close(); 
    } 

    public static void deleteFile(File file) 
    { 
     if (!file.delete()) 
     { 
      System.out.println("Can not delete file with name " + file.getName()); 
     } 
    } 
} 

et classe FileUtils

import java.io.File; 

public class FileUtils 
{ 

    public static void deleteFile(File file) 
    { 
     if (!file.delete()) 
     { 
      System.out.println("Can not delete file with name " + file.getName()); 
     } 
    } 

    public static void renameFile(File source, File destination) 
    { 
     if (!source.renameTo(destination)) 
     { 
      System.out.println("Can not rename file with name " + source.getName()); 
     } 
    } 
} 

Répondre

-1

Vous avez déclaration suivante: "FileOutputStream FileOutputStream = new FileOutputStream (resultFileAbsolutePath, true);"

Au lieu de "vrai" mettre "false". Ça devrait marcher.

+0

Non, qui permet seulement la écriture outputstream à partir de fichiers multiples –