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或其他复合类型来代替?@Hexafrancecount
应该包含在if
语句中,这不应该留下任何间隙。感谢您指出,我已经完成了edi编辑:除非你的意思是在所有值之后为空,在这种情况下,是的,ArrayList会更好,但是我猜OP对Java来说是非常新的,他可能想保持简单,在这种情况下,一个简单的数组就足够了。不,问题是,txtFiles的长度是用来存储文件夹中的所有文件的,而它应该是容纳txt文件本身。@hexafraction是的,是的,我将更改我的答案。虽然有效,但这可能会在数组中留下一个很好的间隙。也许可以使用arrayList或其他复合类型来代替?@hexafractioncount
应该包含在if
语句中,这不应该留下任何间隙。感谢您指出,我已经编辑:除非你的意思是在所有值之后为空,在这种情况下是的,ArrayList会更好,但是我猜OP对Java来说是非常新的,他可能想保持简单,在这种情况下,一个简单的数组就足够了。不,问题是txtFiles的长度是用来存储文件夹中的所有文件的,而它应该是只能容纳txt文件本身。@是的,是的,我将更改我的答案。