【问题标题】:Read from a file containing integers - java从包含整数的文件中读取 - java
【发布时间】:2012-07-07 13:11:58
【问题描述】:

我正在尝试从包含三个数字的文件中读取。该文件如下所示:

45
20
32

我的代码如下:

import java.awt.Color;
import java.awt.Desktop.Action;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
import javax.swing.Timer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JSlider;
import javax.swing.border.TitledBorder;


public class practise implements ActionListener {

int menuCount = 0;
int [] fileValues = new int[3];

JFrame frame1 = new JFrame();
JPanel[] panels = new JPanel[3];

JMenuItem menuitemMyDialog1 = new JMenuItem( "Open File" );
JMenuItem menuitemMyDialog2 = new JMenuItem( "EXIT" );
JMenuBar menuBar = new JMenuBar( );
JMenu menuData = new JMenu( "Menu" );

Label label = new Label();

JSlider slider = new JSlider( JSlider.VERTICAL,0,100,20);;

Timer timer = new Timer(1000,new TimerAction());

void go(){

    frame1.setTitle("Referred Coursework");
    frame1.setSize(600, 300);
    frame1.setVisible(true);
    buildGUI();


    menuitemMyDialog1.addActionListener( this );
    menuData.add( menuitemMyDialog1 );

    //buildGUI();

    menuitemMyDialog2.addActionListener( this );
    menuData.add( menuitemMyDialog2 );

    menuBar.add( menuData );
    frame1.setJMenuBar( menuBar );

}
int b = 0;
class TimerAction implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if(b == 3){ timer.stop(); }
        slider.setValue(fileValues[b]);
        b++;
    }
}


@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub


    if(arg0.getSource() == menuitemMyDialog1){
        menuCount = 1;
        String inputValue = JOptionPane.showInputDialog("File Open dialog box");
        label.setSize(80,80);
        label.setText(inputValue);
        label.setLocation(40,160);

        //fileValues[1] = 27;  fileValues[0] = 2;  fileValues[2] = 62;


        try {
            FileReader file = new FileReader("temperature.txt");
            BufferedReader buf = new BufferedReader(file);
            int i = 0;

            String s = null;
            while((s = buf.readLine()) != null){
            fileValues[i] = Integer.parseInt(s);
            i++;
            }
        }catch (Exception e){e.printStackTrace();}

        Arrays.sort(fileValues);
        for (int i : fileValues){
            System.out.println(i);
        }

        timer.start();


    }
    if(arg0.getSource() == menuitemMyDialog2){

        frame1.dispose();
        System.exit(0);
    }

    }

public void buildGUI(){
    layoutComponents();
}

public void layoutComponents(){



    JLabel label1 = new JLabel();

    JSlider slider2,slider3;
    //JProgressBar bar = new JProgressBar( JProgressBar.VERTICAL,1000, 1020 );

    panels[0] = new JPanel();
    panels[1] = new JPanel();
    panels[2] = new JPanel();

    panels[1].setBorder( new TitledBorder( "Temperature" ) );

    slider.setMajorTickSpacing(20);
    slider.setPaintTicks( true );
    slider.setPaintLabels( true );
    slider.setMinorTickSpacing(10);

    panels[1].add( slider );

    panels[1].setBackground(Color.orange);

    frame1.setLayout( new GridLayout( 1,2 ) );
    for ( int i = 0; i < panels.length;i++ ){
            frame1.add( panels[i] );
        }
}

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    practise obj = new practise();
    obj.go();


}

}

程序编译正常,没有错误。但是当我输出数组 fileValues 的内容时,我得到: 0 0 0

任何帮助将不胜感激。谢谢!

更新 我查看了 FileReader 的异常,现在它显示了 FileNotFoundException。这很奇怪,因为该文件存在于项目文件夹中。有什么建议吗??

【问题讨论】:

  • 使用扫描仪类检查一下stackoverflow.com/a/304061/639891
  • fileValues 在哪里声明和初始化?
  • 看起来它应该对我有用,问题可能在于你没有发布的代码。
  • 我的猜测是 fileValues 已被初始化为 0 的数组,并且 - 无论出于何种原因 - 它都没有填充解析结果
  • 你去..完整的代码....

标签: java arrays file-io


【解决方案1】:

您需要提供“temperature.txt”的完整路径。

忽略 I/O 操作发送的异常:

    try {
        FileReader file = new FileReader("temperature.txt");
        BufferedReader buf = new BufferedReader(file);
        int i = 0;

        String s = null;
        while ((s = buf.readLine()) != null) {
            fileValues[i] = Integer.parseInt(s);
            i++;
        }
    } catch (Exception e) {
    }

如果您将 catch 块替换为以下内容:

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

您应该会收到一条不言自明的消息。

【讨论】:

  • 并且在使用完整路径时是否有效?有没有试过一步步调试,看看哪里出了问题?
  • 您确实看到了 0 0 0 的输出,对吗?而且只有一个地方可以打印数组?
  • 我不知道该怎么做。我在 Eclipse 上运行代码
  • 您需要在 filereader 行设置断点并在调试模式下运行您的程序(更多详细信息 => google)。这应该可以帮助您找到问题所在。祝你好运!
  • 感谢您的帮助!我试过调试器。它给出了找不到文件的异常。它以前没有像我运行程序时那样给出它。然而,奇怪的是,即使我使用文件的完整路径,它也会给出这个错误。
猜你喜欢
  • 1970-01-01
  • 2015-05-14
  • 2015-11-06
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多