无法在main中传递方法

时间:2011-03-04 18:38:05

标签: java

我用txt checkIsFile的一些方法编写了一个类,读取了多少行,放入数组并打印数组,它工作正常。

package myProva;

import java.io.*;
import java.util.StringTokenizer;
import java.util.*;
import java.text.SimpleDateFormat;

public final class FileImport {

    private File fileToImport;
    private Date[] dateArray;
    private double[][] dataArray;

    public FileImport(File myFile) {
        fileToImport = myFile;
}//constructor for fileToImport field

    int lines = 0;
    String[][]bin;

    public boolean checkIsFile(){
        return fileToImport.isFile();
    }

    public int numberOfLines(){
        lines = 0;
        if(checkIsFile()){
            try{
                FileReader fr = new FileReader(fileToImport);
                BufferedReader br = new BufferedReader(fr);
                while((br.readLine()!=null)){
                    lines++;
                }//end while loop
                br.close();
        }catch(Exception e){
                System.out.println(e);
            }
        }
          else{
               System.out.println("There is no file to import");
                }
        return lines;
        }//returns number of lines in a txt file

    public void importToArray(){
        int rows = 0;
        bin = new String[numberOfLines()][6];
        try {
             FileReader fr = new FileReader(fileToImport);
             BufferedReader br = new BufferedReader(fr);
             String line = null;

             while((line = br.readLine())!= null){
                 StringTokenizer stk = new StringTokenizer(line, ",");
                 while(stk.hasMoreTokens()){
                     for (int cls = 0;cls<6; cls++){
                         bin[rows][cls]= stk.nextToken();
                     }
                     rows++;
                 }//end inner while loop
             }//end outer while loop
             br.close();
        }//end try
        catch(Exception e){
            System.out.println(e);
        }
    }//import data to bin array

    public void printArray(){
        for(int i =0;i<bin.length; i++){
            System.out.printf("%s ", i);
            for(int j =0;j<bin[i].length; j++){
                System.out.printf("%s ", bin[i][j]);
            }
            System.out.println("");
        }//end for loop
    }//print contents of bin array

    public String[][] getArray(){
        return bin;
    }//return bin array

我在主类

中调用这些方法
package myProva;

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import java.io.*;

public class ProvaJFrame extends javax.swing.JFrame {

    /** Creates new form ProvaJFrame */
    public ProvaJFrame() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        LoadDataButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        LoadDataButton1.setText("Load Data");
        LoadDataButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                LoadDataButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(53, 53, 53)
                .addComponent(LoadDataButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(450, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(122, 122, 122)
                .addComponent(LoadDataButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(229, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void LoadDataButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                                
JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileFilter(new TxtFileFilter());
    int returnVal = fileChooser.showOpenDialog(this);
    if(returnVal == JFileChooser.APPROVE_OPTION){

        File myFile = fileChooser.getSelectedFile();
        FileImport obj1 = new FileImport(myFile);
        System.out.println(obj1.checkIsFile());
        System.out.println(obj1.numberOfLines());

      obj1.importToArray();
      obj1.printArray();

      System.out.println("--------------------------------------");

        }
    }

    private class TxtFileFilter extends FileFilter{
        public boolean accept(File file){
            if(file.isDirectory()) return true;
            String fname = file.getName();
            return fname.endsWith("txt");
        }
        public String getDescription(){
        return "txt file";
    }
    }                                               

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ProvaJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton LoadDataButton1;
    // End of variables declaration  

我想添加以下方法并在main中调用但我不知道该怎么做,有人可以帮帮我吗?

public void buildDateArray(String[][]d) {
       SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");//set date format here
       for(int i=0;i<d.length; i++){
           for(int j = 0;j<d[i].length; j++){
               if(j==0){
                   try{
                       Date newDate = (Date)sdf.parse(d[i][0]);//parse first column to Date
                       dateArray[i] = newDate;
                   }//end try
               catch(Exception e){
                       System.out.println(e);
                   }//end catch
           }
       }
   }//end for loops
    }

    public void buildDataArray(String[][]d){
       for(int i=0;i<d.length;i++){
           for(int j=0;j<d[i].length; j++){
               switch(j){
                   case 0:
                       dataArray[i][j]=0;
                       break;
                  case 1:
                       dataArray[i][j]=new Double(d[i][j]);
                       break;
                  case 2:
                       dataArray[i][j]=new Double(d[i][j]);
                       break;
                  case 3:
                       dataArray[i][j]=new Double(d[i][j]);
                       break;
                  case 4:
                       dataArray[i][j]=new Double(d[i][j]);
                       break;
                  case 5:
                       dataArray[i][j]=new Double(d[i][j]);
                       break;
                 }//end switch
           }
       }//end for loops
   }

     public void printDataArray(){
       for(int i=0;i<dataArray.length;i++){
           for(int j=0;j<dataArray[i].length;j++){
               System.out.printf("%s ", dataArray[i][j]);
           }
           System.out.println("");
       }
   }

     public void printDateArray(){
       for(int i=0;i<dateArray.length;i++){
           System.out.println(dateArray[i]);
       }
   }
}

谢谢大家。

PS txt文件如下:

4887 20100406 6250.01 6265.32 6214.18 6252.21 29445700 
4888 20100407 6248.37 6256.4 6208.52 6222.41 28689600 
4889 20100408 6199.94 6207.14 6138.02 6171.83 30684300              

2 个答案:

答案 0 :(得分:0)

你有一个你必须要求的对象。我假设它与您丢弃的相同。

ProvaJFrame pjf = new ProvaJFrame();
pjf.buildDateArray(someData);
pjf.setVisible(true);

答案 1 :(得分:0)

您可以将方法声明为静态,以便可以从main调用它们。像这样:

public static void buildDataArray(String[][]d){ 
    // ...snip...
}