开发者

Can't pass methods in main

I wrote a class with some methods to for txt checkIsFile, read how many lines are there, put in an array and print the array, and it works fine.

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

I call these methods in main class

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  

I would like to add the following methods and call in main but I do not know how to do, can anybody help me?

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]);
       }
   }
}

Thanks all.

PS txt file is as follows:

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              


You have an object which you have to call on. I assumes its the same one you are discarding.

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


You can declare the methods as static so that they can be called from main. Like so:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜