Java 显示当前(或指定)目录中所有.txt文档的名称

Java 显示当前(或指定)目录中所有.txt文档的名称,java,directory,Java,Directory,因此,我有以下代码(这是从一个教程中无耻地复制出来的,这样我就可以对基础知识进行排序),其中它要求玩家加载他们的游戏(基于文本的冒险游戏) 但是我需要一种方式来显示目录中所有保存的游戏。我可以得到当前的目录,不用担心。这是我的密码: public void load(Player p){ Sleep s = new Sleep(); long l = 3000; Scanner i = new Scanner(System.in);

因此,我有以下代码(这是从一个教程中无耻地复制出来的,这样我就可以对基础知识进行排序),其中它要求玩家加载他们的游戏(基于文本的冒险游戏) 但是我需要一种方式来显示目录中所有保存的游戏。我可以得到当前的目录,不用担心。这是我的密码:

public void load(Player p){
        Sleep s = new Sleep();
        long l = 3000;

        Scanner i = new Scanner(System.in);
        System.out.println("Enter the name of the file you wish to load: ");
        String username = i.next();
        File f = new File(username +".txt");
        if(f.exists()) {
            System.out.println("File found! Loading game....");
            try {
                //information to be read and stored
                String name;
                String pet;
                boolean haspet;

                //Read information that's in text file
                BufferedReader reader = new BufferedReader(new FileReader(f));
                name = reader.readLine();
                pet = reader.readLine();
                haspet = Boolean.parseBoolean(reader.readLine());
                reader.close();

                //Set info
                Player.setUsername(name);
                Player.setPetName(pet);
                Player.setHasPet(haspet);

                //Read the info to player
                System.out.println("Username: "+ p.getUsername());
                s.Delay(l);
                System.out.println("Pet name: "+ p.getPetName());
                s.Delay(l);
                System.out.println("Has a pet: "+ p.isHasPet());

            } catch(Exception e){
                e.printStackTrace();
            }
            }
    }
这应该起作用:

File folder = new File("path/to/txt/folder");
File[] files = folder.listFiles();
File[] txtFiles = new File[files.length];
int count = 0;

for(File file : files) {
    if(file.getAbsolutePath().endsWith(".txt")) {
        txtFiles[count] = file;
        count++;
    }
}
这应该是不言自明的,您只需要知道
folder.listFiles()

要精简
txtFiles[]
数组,请使用
array.copyOf

File[]finalFiles=Array.copyOf(txtFiles,count)

从文档中:

复制指定的数组,截断或填充false(如有必要),使副本具有指定的长度

这应该起作用:

File folder = new File("path/to/txt/folder");
File[] files = folder.listFiles();
File[] txtFiles = new File[files.length];
int count = 0;

for(File file : files) {
    if(file.getAbsolutePath().endsWith(".txt")) {
        txtFiles[count] = file;
        count++;
    }
}
这应该是不言自明的,您只需要知道
folder.listFiles()

要精简
txtFiles[]
数组,请使用
array.copyOf

File[]finalFiles=Array.copyOf(txtFiles,count)

从文档中:

复制指定的数组,截断或填充false(如有必要),使副本具有指定的长度


您可以首先获取目录的
文件
对象:

File ourDir = new File("/foo/bar/baz/qux/");
然后通过检查
ourDir.isDirectory()
可以确保您不会意外尝试处理文件。您可以通过返回到另一个名称或引发异常来处理此问题

然后,您可以获得
文件
对象的数组:

File[] dirList = ourDir.listFiles();
现在,您可以使用getName()对它们进行迭代,并根据需要执行任何操作

例如:

ArrayList<String> fileNames=new ArrayList<>();
for (int i = 0; i < dirList.length; i++) {
    String curName=dirList[i].getName();
    if(curName.endsWith(".txt"){
        fileNames.add(curName);   
    }
}
ArrayList fileNames=new ArrayList();
对于(int i=0;i
您可以首先获取目录的
文件
对象:

File ourDir = new File("/foo/bar/baz/qux/");
然后通过检查
ourDir.isDirectory()
可以确保您不会意外尝试处理文件。您可以通过返回到其他名称或引发异常来处理此问题

然后,您可以获得
文件
对象的数组:

File[] dirList = ourDir.listFiles();
现在,您可以使用getName()对它们进行迭代,并根据需要执行任何操作

例如:

ArrayList<String> fileNames=new ArrayList<>();
for (int i = 0; i < dirList.length; i++) {
    String curName=dirList[i].getName();
    if(curName.endsWith(".txt"){
        fileNames.add(curName);   
    }
}
ArrayList fileNames=new ArrayList();
对于(int i=0;i
欢迎使用SO。您应该使用。欢迎使用SO。您应该使用。虽然有效,但这可能会在数组中留下一个很好的间隙。也许可以使用arrayList或其他复合类型来代替?@Hexafrance
count
应该包含在
if
语句中,这不应该留下任何间隙。感谢您指出,我已经完成了edi编辑:除非你的意思是在所有值之后为空,在这种情况下,是的,ArrayList会更好,但是我猜OP对Java来说是非常新的,他可能想保持简单,在这种情况下,一个简单的数组就足够了。不,问题是,txtFiles的长度是用来存储文件夹中的所有文件的,而它应该是容纳txt文件本身。@hexafraction是的,是的,我将更改我的答案。虽然有效,但这可能会在数组中留下一个很好的间隙。也许可以使用arrayList或其他复合类型来代替?@hexafraction
count
应该包含在
if
语句中,这不应该留下任何间隙。感谢您指出,我已经编辑:除非你的意思是在所有值之后为空,在这种情况下是的,ArrayList会更好,但是我猜OP对Java来说是非常新的,他可能想保持简单,在这种情况下,一个简单的数组就足够了。不,问题是txtFiles的长度是用来存储文件夹中的所有文件的,而它应该是只能容纳txt文件本身。@是的,是的,我将更改我的答案。