从包含整数的文件读取-java

从包含整数的文件读取-java,java,arrays,file-io,Java,Arrays,File Io,我试图从包含三个数字的文件中读取。该文件如下所示: 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; i

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

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();


}
导入java.awt.Color;
导入java.awt.Desktop.Action;
导入java.awt.GridLayout;
导入java.awt.Label;
导入java.awt.MenuItem;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.array;
导入java.util.Scanner;
导入javax.swing.Timer;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JProgressBar;
导入javax.swing.JSlider;
导入javax.swing.border.TitledBorder;
公共课堂练习实施ActionListener{
int menuCount=0;
int[]fileValues=新的int[3];
JFrame frame1=新JFrame();
JPanel[]面板=新JPanel[3];
JMenuItem menuitemMyDialog1=新的JMenuItem(“打开文件”);
JMenuItem menuitemMyDialog2=新的JMenuItem(“退出”);
JMenuBar menuBar=newjmenubar();
JMenu menuData=新JMenu(“菜单”);
标签=新标签();
JSlider滑块=新JSlider(JSlider.VERTICAL,0100,20);;
定时器=新定时器(1000,new TimerAction());
void go(){
框架1.课程名称(“参考课程”);
框架1.设置大小(600300);
frame1.setVisible(true);
buildGUI();
menuitemydialog1.addActionListener(此);
menuData.add(menuitemydialog1);
//buildGUI();
menuitemydialog2.addActionListener(此);
menuData.add(menuitemydialog2);
menuBar.add(menuData);
frame1.setJMenuBar(菜单栏);
}
int b=0;
类TimerAction实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(b==3){timer.stop();}
slider.setValue(fileValues[b]);
b++;
}
}
@凌驾
已执行的公共无效操作(操作事件arg0){
//TODO自动生成的方法存根
如果(arg0.getSource()==menuitemMyDialog1){
menuCount=1;
String inputValue=JOptionPane.showInputDialog(“文件打开对话框”);
标签。设置尺寸(80,80);
label.setText(inputValue);
标签设置位置(40160);
//fileValues[1]=27;fileValues[0]=2;fileValues[2]=62;
试一试{
FileReader文件=新的FileReader(“temperature.txt”);
BufferedReader buf=新的BufferedReader(文件);
int i=0;
字符串s=null;
而((s=buf.readLine())!=null){
fileValues[i]=整数.parseInt;
i++;
}
}catch(异常e){e.printStackTrace();}
Arrays.sort(filevalue);
for(inti:fileValues){
系统输出打印LN(i);
}
timer.start();
}
如果(arg0.getSource()==menuitemMyDialog2){
frame1.dispose();
系统出口(0);
}
}
public void buildGUI(){
布局组件();
}
公共void布局组件(){
JLabel label1=新的JLabel();
JSlider滑块2、滑块3;
//JProgressBar=新的JProgressBar(JProgressBar.VERTICAL,10001020);
panels[0]=新的JPanel();
面板[1]=新的JPanel();
面板[2]=新的JPanel();
面板[1]。订单(新标题边框(“温度”));
滑块。设置主轨迹间距(20);
slider.setPaintTicks(真);
slider.setPaintLabels(true);
滑块。设置MinortickSpacing(10);
面板[1]。添加(滑块);
面板[1]。背景(颜色为橙色);
框架1.setLayout(新的GridLayout(1,2));
对于(int i=0;i
}

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

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


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

您需要提供“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 (Exception e) {
        System.out.println(e.getMessage());
    }

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

使用scanner类检查文件值在哪里声明和初始化?看起来对我来说应该有用,问题可能出在您没有发布的代码中。我猜fileValues已初始化为0的数组,而无论出于何种原因,它都没有填充解析结果。。完整的代码…当使用完整的路径时,它能工作吗?您是否尝试过一步一步地调试以查看出现了什么问题?您确实看到了0正确的输出?只有一个地方可以打印阵列?我不知道如何正确打印。我正在Eclipse上运行代码您需要在filereader行上设置一个断点,并在调试模式下运行您的程序(有关更多详细信息=>google)。这会帮助你找到问题所在。祝你好运谢谢你的帮助!我试过调试器。它给出了文件未找到异常。它没有像我运行程序时那样给出它。然而,奇怪的是,即使在我使用文件的完整路径时,它也会给出这个错误。