当前位置: 首页 > 知识库问答 >
问题:

我想从txt文件读取并写入现有的JTable

章心水
2023-03-14

我已经创建了一个JFrame,里面有一个JTable,我可以在单元格上写信息。我可以单击Save JMenuItem Save并将信息写入txt文件。然而,当我试图读取文件并将其返回到表中时,我面临三个问题。

  1. JTable由30行组成。当代码读取txt文件时,在第30行下面添加行。是否有办法从第一行而不是第31行开始填充输入?--已解决
  2. 数据写入不正确。所有这些都写在第一列——已解决
  3. 如何去掉“null”字符串--解决

我的txt文件格式是这样的:

Number;Type;IP;Protocol;Line;
49897223040;WE4;192.168.12.98;TCP;Single;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;
null;null;null;null;null;

我的代码如下:

public class PhoneOrganiser extends JFrame {
public static void main(String[] args){


            //creation of the Window
            JFrame frame = new JFrame ("Phone Organiser");
            frame.setSize(200, 300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);

            //declaring the type of Table, Number of columns and rows
            String col[] ={"Number", "Type", "IP", "Protocol", "Line"};
            DefaultTableModel tableModel = new DefaultTableModel (col,30);

            //create the table
            JTable table = new JTable(tableModel);

            //add the Table to the scrollpane 
            JScrollPane scrollpane = new JScrollPane(table);
            frame.add(scrollpane);

            //creating the Menu bar
            JMenuBar menubar = new JMenuBar();
            frame.setJMenuBar(menubar);

            //adding menus
            JMenu file = new JMenu ("File");
            menubar.add(file);


            JMenu help = new JMenu ("Help");
            menubar.add(help);


            //adding items inside the menus
            JMenuItem open = new JMenuItem ("Open");
            file.add(open);

            JMenuItem save = new JMenuItem ("Save");
            file.add(save);



            JMenuItem exit = new JMenuItem ("Exit");
            file.add(exit);
            exit.addActionListener(new Exit());

            JMenuItem readMe = new JMenuItem ("Read me file");
            help.add(readMe);
            readMe.addActionListener(new ReadMe());
            JMenuItem about = new JMenuItem ("About");
            help.add(about);
            about.addActionListener(new About());





    //When the program starts for the first time, it creates a new txt file
    Path path = Paths.get("/Users/PhoneData.txt");
    try{
        Files.createFile(path);
        System.out.println("file created");
    }catch (IOException e1){
        System.out.println("file already exists");
    }


    //saving data from TABLE -> TO TXT - It can be done with FileChooser in V2

    class SaveData extends JFrame implements ActionListener {

        public void actionPerformed (ActionEvent e){

            try{

                File file = new File ("C:\\Users\\PhoneData.txt"); //declaring the path of the file
                FileWriter fw = new FileWriter (file.getAbsoluteFile()); 
                BufferedWriter bw = new BufferedWriter (fw);

                    //rows
                    for (int i =0; i < table.getRowCount(); i++){

                        //columns
                        for (int j=0; j < table.getColumnCount(); j++){
                            bw.write((String)table.getModel().getValueAt(i, j)+ ";"); //write the contents to the file

                        }
                        bw.write("/");
                        bw.newLine();
                    }
                    bw.close();
                    fw.close();

            }catch (IOException e2){

            }//end catch

        }//end action method


    }save.addActionListener(new SaveData()); //end SaveData class


    //reading data from TXT -> TO TABLE

    class OpenData extends JFrame implements ActionListener{

        public void actionPerformed (ActionEvent e){

            String line = null;

            try{

                File file = new File ("C:\\Users\\PhoneData.txt");
                FileReader fr = new FileReader (file.getAbsoluteFile());
                BufferedReader br = new BufferedReader (fr);

                while((line = br.readLine()) != "null;") 
                {

                    String [] splitData = line.split("/");
                    Values values = new Values();
                    values.setNumber(splitData[0]);
                    //values.setType(splitData[1]);
                    //values.setIP(splitData[2]);
                    //values.setProtocol(splitData[3]);
                    //values.setLine(splitData[4]);
                    tableModel.addRow(line.split("")); 
                }
                br.close();

            }catch (IOException e3){


            }//end catch

        }//end action method

    }open.addActionListener(new OpenData());//end OpenData class






}//end main
}//end class


public  class Values{
        private String Number;
        private String Type;
        private String IP;
        private String Protocol;
        private String Line;

        public String getNumber(){
            return Number;
        }
        public void setNumber(String Number){
            this.Number = Number;
        }


        public String getType(){
            return Type;
        }
        public void setType(String Type){
            this.Type = Type;
        }


        public String getIP(){
            return IP;
        }
        public void setIP(String IP){
            this.IP = IP;
        }


        public String getProtocol(){
            return Protocol;
        }
        public void setProtocol(String Protocol){
            this.Protocol = Protocol;
        }


        public String getLine(){
            return Line;
        }
        public void setLine(String Line){
            this.Line = Line;
        }
    }//end class Values

共有1个答案

云洋
2023-03-14

Ad.3代码非常清楚:

 for (int j=0; j < table.getColumnCount(); j++){
      String value = (String)table.getModel().getValueAt(i, j);
      if((value == null || "null".equals(value)){
          value = "";
      }
      bw.write(value+";"); //write the contents to the file
 }

Ad.2需要对代码进行简单修改:

StringBuilder builder = new StringBuilder();
    while ((line = bufferedReader.readLine()) != null) {
        builder.append(line);
    }
String[] lineArray= builder.toString().split("/");
for(String line: lineArray){
    String[] dataArray = line.split(";");
    tableModel.addRow(dataArray);
}

希望这是你想要实现的目标。完整代码如下:

public class PhoneOrganiser extends JFrame {
    public static void main(String[] args){


    //creation of the Window
    JFrame frame = new JFrame ("Phone Organiser");
    frame.setSize(200, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    //declaring the type of Table, Number of columns and rows
    final String col[] ={"Number", "Type", "IP", "Protocol", "Line"};
    final DefaultTableModel tableModel = new DefaultTableModel (col,30);

    //create the table
    final JTable table = new JTable(tableModel);

    //add the Table to the scrollpane
    JScrollPane scrollpane = new JScrollPane(table);
    frame.add(scrollpane);

    //creating the Menu bar
    JMenuBar menubar = new JMenuBar();
    frame.setJMenuBar(menubar);

    //adding menus
    JMenu file = new JMenu ("File");
    menubar.add(file);

    JMenu help = new JMenu ("Help");
    menubar.add(help);

    //adding items inside the menus
    JMenuItem open = new JMenuItem ("Open");
    file.add(open);

    JMenuItem save = new JMenuItem ("Save");
    file.add(save);


    JMenuItem exit = new JMenuItem ("Exit");
    file.add(exit);


    //When the program starts for the first time, it creates a new txt file
    Path path = Paths.get("/Users/PhoneData.txt");
    try{
        Files.createFile(path);
        System.out.println("file created");
    }catch (IOException e1){
        System.out.println("file already exists");
    }

    //saving data from TABLE -> TO TXT - It can be done with FileChooser in V2

    class SaveData extends JFrame implements ActionListener {

        public void actionPerformed (ActionEvent e){

            try{

                File file = new File ("C:\\Inne\\PhoneData.txt"); //declaring the path of the file
                FileWriter fw = new FileWriter (file.getAbsoluteFile());
                BufferedWriter bw = new BufferedWriter (fw);

                //rows
                for (int i =0; i < table.getRowCount(); i++){

                    for (int j=0; j < table.getColumnCount(); j++){
                        String value = (String)table.getModel().getValueAt(i, j);
                        if((value == null || "null".equals(value))) {
                            value = "";
                        }
                        bw.write(value+";"); //write the contents to the file
                    }
                    bw.write("/");
                    bw.newLine();
                }
                bw.close();
                fw.close();

            }catch (IOException e2){

            }//end catch

        }//end action method


    }
    save.addActionListener(new SaveData()); //end SaveData class

    //reading data from TXT -> TO TABLE

    class OpenData extends JFrame implements ActionListener{

        public void actionPerformed (ActionEvent e){

            String line = null;
            try{

                File file = new File ("C:\\Inne\\PhoneData.txt");
                FileReader fr = new FileReader (file.getAbsoluteFile());
                BufferedReader br = new BufferedReader (fr);

                StringBuilder builder = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    builder.append(line);
                }
                String[] lineArray= builder.toString().split("/");
                table.setModel(new DefaultTableModel(col,0));
                for(String currentLine: lineArray){
                    String[] dataArray = currentLine.split(";");
                    ((DefaultTableModel)table.getModel()).addRow(dataArray);
                }
                br.close();

            }catch (IOException e3){


            }//end catch

        }//end action method

    }open.addActionListener(new OpenData());//end OpenData class

}
}
 类似资料:
  • 本文向大家介绍Java读取txt文件和写入txt文件的简单实例,包括了Java读取txt文件和写入txt文件的简单实例的使用技巧和注意事项,需要的朋友参考一下 写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂! 以上这篇Java读取txt文件和写入txt文件的简单实例就是小编分享给大家的全部内容了,希望能给

  • 问题内容: 我正在尝试运行一个应用程序(例如),因此它将从文件中读取stdin并从stdout写入另一个文件。 目前我有 它可以按预期工作,因为我可以对该文件进行某些操作,并且top可以接收它。但是我无法重定向top的输出。我该如何实现? 编辑: 好吧,让我们从头开始。我正在测试: 问题答案: 让我们忘掉这似乎是一条红色的鲱鱼。 要将stdin或stdout映射到文件,可以使用重定向: 甚至:

  • 我正在尝试读取一个文本文件,其中包含表示十六进制值的文本: 我应该读取这个文件,并使用写入一个新文件来写入这些十六进制值的二进制等价值,其中表示0,而表示1。 示例: 而的输出是 在应该的时候 我的逻辑就在那里,但是似乎只写了的第一行。这让我相信我只是在读第一行。 我被迫使用C样式的字符串,因此我读入了char数组。 这是我的代码 我怀疑是,但我不完全确定。我加了几条评论,试图解释一下我去的路线。

  • 所以,我试图让我的程序从文本文件中读入一个结构数组,它编译得很好,但看起来并没有真正读入值?...我不知道为什么。这是代码的相关部分: 这是txt文件(标题:Planets.txt) 水星120 50 500 12.1 30 2金星120 50 500 29.1 30 6地球120 50 500 32.2 30 7月亮120 15 50 5.3 30 2火星120 50 500 12.2 30 4

  • 问题内容: 如何将一小段文字写入文件?我已经使用Google搜索了3-4多个小时,但无法找到具体方法。 有很多论据,我不知道该如何使用。 当您只想在文件中写一个名字和几个数字时,最容易使用的功能是什么? 编辑:添加了一段我的代码。 问题答案:

  • 本文向大家介绍c++读取和写入TXT文件的整理方法,包括了c++读取和写入TXT文件的整理方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇c++读取和写入TXT文件的整理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。