如何解决使用java在txt文件中的列中订购N个数字行
我正在尝试做我老师给的作业,我必须用 Java 在文本文件中的列中订购一组数字行 免责声明:我的老师不希望此作业使用 Scanner 类:示例数据如下:
17,10,6,90,11
结果应该是这样的:
17
10
6
90
11
我的代码是这样的:
package esercizio.prova.verifica;
import java.io.*;
public class EsercizioProvaVerifica {
public static void main(String[] args) {
//read the file and put content in a String array
String[] str={};
String line = "";
try{
BufferedReader reader = new BufferedReader(new FileReader("C:\\sorgente\\file.txt"));
int i=0;
while((line=reader.readLine())!=null || i<str.length){
line = reader.readLine();
System.out.println(line + i);
str[i]=line;
i++;
}
reader.close();
} catch(IOException e){}
// Write array on file
for (int i=0;i<str.length;i++){
System.out.println(str[i]);
}
try{
BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\sorgente\\file.txt"));
for (int i = 0; i < str.length; i++) {
bw.write(str[i] + "\n"+ "");
}
bw.close();
}catch (IOException e1){}}}
问题是每次运行程序时,文件中的文本消失,Java 返回以下输出:
run:
6,0
Exception in thread "main" java.lang.Arrayindexoutofboundsexception: 0
at esercizio.prova.verifica.EsercizioProvaVerifica.main(EsercizioProvaVerifica.java:16)
C:\Users\franc\AppData\Local\NetBeans\Cache\8.2rc\executor-snippets\run.xml:53: Java returned: 1
BUILD Failed (total time: 0 seconds)
我搜索了几个小时,但找不到问题,有人可以帮忙吗?非常感谢。
解决方法
您初始化了一个长度为零的空数组。数组长度必须事先确定,并且不能在运行时更改。但是由于您不知道您的文件可以有多少行,因此数组不是正确的数据结构。改用列表。
将 try 与资源一起使用。这样您就不必手动关闭读取器和写入器。
回写时不要拆分单个数字。以逗号分隔每一行。
使用系统行分隔符代替 \n,这样您的代码在所有操作系统上的行为都相同。
不要忽略异常,即不要做catch(IOException e){}
示例:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] args) {
List<String> lines = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader("C:\\sorgente\\file.txt"))){
// read line by line and add to list
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
} catch (IOException e) {
System.err.format("IOException: %s%n",e);
}
try(BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\sorgente\\file.txt"))){
for(int i = 0; i < lines.size(); i++){
//splite each line at the commas
String[] parts = lines.get(i).split(",");
for(int k = 0; k < parts.length; k++){
//remove unnecessary spaces befor ore after comma using trim method
bw.write(parts[k].trim());
bw.write(System.lineSeparator());
}
}
}
catch (IOException e) {
System.err.format("IOException: %s%n",e);
}
}
}
,
你有几个问题。
- 您尝试写入一个没有分配的数组。
- 您可以在 while 指令和 while 块中阅读。这会导致您跳过值。
- 您没有在分隔符 (
__
) 上拆分值 - 你忽略了例外。
这是一种方法。有不少。这使用单个循环进行读取和写入。
- 打开源文件并创建一个临时输出文件。
- 正如你在一行中读到的
- 分割剩余的
,
并写出值。 - 完成后,关闭每个文件,然后删除原始文件,然后重命名为原始文件。
,s
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。