微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用java在txt文件中的列中订购N个数字行

如何解决使用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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?