Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类似java的ls中的格式化输出_Java_Formatting_Output - Fatal编程技术网

类似java的ls中的格式化输出

类似java的ls中的格式化输出,java,formatting,output,Java,Formatting,Output,我有目录中文件和目录的名称列表,例如: List<String> list = new ArrayList<Strings>(); /* list of files */ 列的数量取决于文件的数量,列的大小取决于同一列中每个文件或目录名的长度。 如果我知道文件的数量,我会在 但是文件或目录的数量可能是可变的。。 如何操作?获取文件夹中的文件数 File file = new File("D:\\AnyFolder"); if(file.isDirectory()) {

我有目录中文件和目录的名称列表,例如:

List<String> list = new ArrayList<Strings>(); /* list of files */
列的数量取决于文件的数量,列的大小取决于同一列中每个文件或目录名的长度。 如果我知道文件的数量,我会在 但是文件或目录的数量可能是可变的。。
如何操作?

获取文件夹中的文件数

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

我相信这将满足您的要求:

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");
            }
        }
    }

}
导入java.io.File;
公共类Ls{
私有静态final int NUM_COLUMNS=3;
私有静态最终整数分隔空间长度=2;
公共静态void main(字符串[]args){
文件=新文件(“C:/WINDOWS”);
if(file.isDirectory()){
File[]listFiles=File.listFiles();
列表(列表文件);
}
}
私有静态无效列表(文件[]文件){
int[]maxLength=新的int[NUM_列];
对于(int i=0;i
如果不清楚,请告诉我

谢谢,

现在好了。在您的案例中,您尝试过什么样的解决方案?我尝试过静态列长和静态列数。但我不知道如何像ls那样动态地完成它。我通常不会将输出格式作为文件系统的一部分,但我也没有看到您任务的措辞,所以我知道什么。。。无论如何,对于这种优化,我认为您需要一些动态编程的应用程序(但自从我上学以来,我就没有做过任何动态编程,所以我无法帮助您了解细节…),我们正在用java实现我们自己的文件系统,作为学校工作。。实际上,我在字符串的ArrayList中有文件名,就像我提到的,我可以得到文件的数量或每个名称的长度,但主要问题是动态输出格式。
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");
            }
        }
    }

}