英文:
Java: BufferedReader not printing out File content on TXT file
问题
我在使用BufferedReader读取txt文件夹中的内容时遇到问题,该文件夹通过方法`showEditFile()`调用,方法中使用了来自方法`pideNumero.preguntaUno();`的用户输入数组来调用,该方法接受一个整数来迭代数组位置:
遍历文件夹"Archivos"的数组。
```java
public static String[] testFiles() {
String endPath = System.getProperty("user.dir");
String separator = File.separator;
String folderPath = endPath + separator + "Archivos";
File carpeta = new File(folderPath);
String[] lista = carpeta.list();
return lista;
}
以下是读取内容的方法,应该读取内容的第一行为Hellowwwww:
public static void showEditFile() throws IOException {
System.out.println("Por Favor, elige un archivo con su numero para mostrar su contenido ");
System.out.println("Los archivos dentro la carpeta Archivos son: ");
Menu.listFiles.nomFiles();
String[] archivos = Menu.listFiles.testFiles();
int menu = Menu.pideNumero.preguntaUno();
File document = new File(archivos[menu - 1]);
try {
FileReader fr = new FileReader(document);
BufferedReader br = new BufferedReader(fr);
String line;
line = br.readLine();
System.out.println(line);
} catch (FileNotFoundException e) {
System.out.println("File not found." + document.toString());
} catch (IOException e) {
System.out.println("Unable to read file: " + document.toString());
}
}
我尝试在调试模式下检查,并发现在FileReader fr = new FileReader(document);
这一行,它会直接跳转到FileNotFoundException,FilePath为null,我认为问题是从这里引起的。
似乎它不知道"Archivos"之后的路径。
路径:
Root\Archivos\kiki.txt
我已经卡在这里整整一天了,有人可以帮忙吗!
<details>
<summary>英文:</summary>
I'm having issues with BufferedReader reading out the content of a txt file within a folder which is called via a method `showEditFile()` using an array with input of the user from method `pideNumero.preguntaUno();` which takes an int to iterate through the array positions :
Array that loops through the Folder "Archivos".
public static String[] testFiles() {
String endPath = System.getProperty("user.dir");
String separator = File.separator;
String folderPath = endPath + separator + "Archivos";
File carpeta = new File(folderPath);
String[] lista = carpeta.list();
return lista;
}
Method which would read the first line of the content which should be **Hellowwwww**:
public static void showEditFile() throws IOException {
System.out.println("Por Favor, elige un archivo con su numero para mostrar su contenido ");
System.out.println("Los archivos dentro la carpeta Archivos son: ");
Menu.listFiles.nomFiles();
String[] archivos = Menu.listFiles.testFiles();
int menu = Menu.pideNumero.preguntaUno();
File document = new File(archivos[menu - 1]);
try {
FileReader fr = new FileReader(document);
BufferedReader br = new BufferedReader(fr);
String line;
line = br.readLine();
System.out.println(line);
} catch (FileNotFoundException e) {
System.out.println("File not found." + document.toString());
} catch (IOException e) {
System.out.println("Unable to read file: " + document.toString());
}
}
I tried to check in Debug mode an see that on line `FileReader fr = new FileReader(document); ` it would jump straight into the FileNotFoundException with the FilePath == **null** which I think comes the problem from.
It seems it doesn't know the path after "Archivos"
Path:
Root\Archivos\kiki.txt
**I've been stuck on this for a full day now can someone please help!**
</details>
# 答案1
**得分**: 1
```carpeta.list()```不提供完全限定的路径,它只提供文件名。因此,在接下来的调用中,```new File(archivos[menu - 1])```将失败。在```new File(archivos[menu - 1])```中,您需要提供完整的路径,这样您就不会收到异常。请参考 https://docs.oracle.com/javase/7/docs/api/java/io/File.html#list()。
<details>
<summary>英文:</summary>
```carpeta.list()``` does not give fully qualified path. It only gives you file name. So next call ```new File(archivos[menu - 1])``` will fail. In ```new File(archivos[menu - 1])``` you will need to provide full and then you will not get Exception. Refer to https://docs.oracle.com/javase/7/docs/api/java/io/File.html#list()
</details>
# 答案2
**得分**: 0
感谢@Jags,我解决了这个问题。以下是解决方案:
在我的数组中,我返回了一个String[],它基本上保存了字符串... 因此,当我尝试从另一个方法调用它以读取内容时,它会显示文件的名称(它是一个字符串,但是不会分配文件路径,因为它只是一个字符串)。
我在这里做出的更改:
```java
public static File[] testFiles() {
String endPath = System.getProperty("user.dir");
String separator = File.separator;
String folderPath = endPath + separator + "Archivos";
File carpeta = new File(folderPath);
// 正如你所看到的,我在这里使用了listFiles()方法来列出所有文件并将它们保存到File[]数组中
File[] lista = carpeta.listFiles();
return lista;
}
现在在调用方法showEditFiles()时:
public static void showEditFile() throws IOException {
System.out.println("Por Favor, elige un archivo con su numero para mostrar su contenido ");
System.out.println("Los archivos dentro la carpeta Archivos son: ");
Menu.listFiles.nomFiles();
File[] archivos = Menu.listFiles.testFiles();
int menu = Menu.pideNumero.preguntaUno();
File document = new File(archivos[menu - 1]);
try {
FileReader fr = new FileReader(document);
BufferedReader br = new BufferedReader(fr);
String line;
line = br.readLine();
System.out.println(line);
} catch (FileNotFoundException e) {
System.out.println("File not found." + document.toString());
} catch (IOException e) {
System.out.println("Unable to read file: " + document.toString());
}
}
现在它会打印出文件的第一行(在这种情况下是"hello")。
英文:
So thanks to @Jags I figured the issue out. Solution below:
In my array I was returning a String[] which saves basically strings... So when I try to call it from my other method to read out the content it would show me the name of the file (which is a string but wouldn't have a file path assigned to it because it's just a string).
Changes I made here:
public static File[] testFiles() {
String endPath = System.getProperty("user.dir");
String separator = File.separator;
String folderPath = endPath + separator + "Archivos";
File carpeta = new File(folderPath);
// here as you can see i used the listFiles() method to list all the files and
// and save them into the File[] array
File[] lista = carpeta.listFiles();
return lista;
}
Now when calling the method in my other method showEditFiles() :
public static void showEditFile() throws IOException {
System.out.println("Por Favor, elige un archivo con su numero para mostrar su contenido ");
System.out.println("Los archivos dentro la carpeta Archivos son: ");
Menu.listFiles.nomFiles();
File[] archivos = Menu.listFiles.testFiles();
int menu = Menu.pideNumero.preguntaUno();
File document = new File(archivos[menu - 1]);
try {
FileReader fr = new FileReader(document);
BufferedReader br = new BufferedReader(fr);
String line;
line = br.readLine();
System.out.println(line);
} catch (FileNotFoundException e) {
System.out.println("File not found." + document.toString());
} catch (IOException e) {
System.out.println("Unable to read file: " + document.toString());
}
}
Now it prints out the first line of the file (which in this case was hellow).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论