2012-12-02 246 views
1

我的文件和目錄名列表目錄,例如:格式化輸出

List<String> list = new ArrayList<Strings>(); /* list of files */ 

,我需要打印像ls命令在Linux下做到這一點。

a.txt file1.txt  filewithverylongname.txt Folder1 
g.txt G_longfile2.txt h.txt     i.txt 

列數取決於文件數和列大小取決於同一列中每個文件或目錄名稱的長度。 如果我知道文件的數量我會在this link 使用的東西,但在文件或目錄的數量是可變的.. 我該怎麼辦呢?

+3

現在好了。你有什麼嘗試適合你的情況下的解決方案? –

+0

我用列的靜態長度和列的靜態數量來試用它。但我不知道如何做到這一點動態像ls那樣。 – user1097772

+0

通常我不會想輸出格式爲文件系統的一部分,但話又說回來,我還沒有看到你的任務的措辭所以我知道什麼...無論如何,對於這種優化佈置的我會認爲你需要動態編程的一些應用(但我沒有做任何一件事,因爲我是在校學生,所以我不能用細節來...)http://en.wikipedia.org/wiki/Dynamic_programming –

回答

0

要獲得文件的數量在文件夾

File file = new File("D:\\AnyFolder"); 
if(file.isDirectory()) { 
    File[] listFiles = file.listFiles(); 
    System.out.println("Total files in folder : " + listFiles.length); 
} 
+0

我們正在實現我們的Java作爲學校工作的自己的文件系統。我actualy有像我提到的字符串的ArrayList的文件的名字,我可以得到的文件或每個名字的長度,但主要問題的數量是動態輸出格式化。 – user1097772

0

我相信這將滿足您的要求:

import java.io.File; 

public class Ls { 

    private static final int NUM_COLUMNS = 3; 
    private static final int SEPARATING_SPACE_LENGTH = 2; 

    public static void main(String[] args) { 
     File file = new File("C:/WINDOWS"); 
     if(file.isDirectory()) { 
      File[] listFiles = file.listFiles(); 
      list(listFiles); 
     } 
    } 

    private static void list(File[] files) { 
     int[] maxLength = new int[NUM_COLUMNS]; 

     for (int i = 0; i < files.length; i++) { 
      int fileLength = files[i].getName().length(); 
      int columnIndex = i % NUM_COLUMNS; 

      if (maxLength[columnIndex] < fileLength) { 
       maxLength[columnIndex] = fileLength; 
      } 
     } 

     for (int i = 0; i < files.length; i++) { 
      String fileName = files[i].getName(); 
      System.out.print(fileName); 
      for (int j = 0; j < maxLength[i % NUM_COLUMNS] - fileName.length() + SEPARATING_SPACE_LENGTH; j++) { 
       System.out.print(" "); 
      } 

      if ((i + 1) % NUM_COLUMNS == 0) { 
       System.out.print("\n"); 
      } 
     } 
    } 

} 

讓我知道,如果現在還不清楚。

感謝,
EG