查找包含当前代码的源文件

时间:2014-05-06 14:48:55

标签: java file-io

我正在尝试编写Java代码以在目录中查找源代码文件。我将编译该文件,然后将其放在其他目录中,程序必须找到该文件,现在我认为我做得对,但每次运行时它仍然会给File not Found

import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;

public class myframe extends JFrame{

    public static void main(String args[]) throws IOException
    {
        myframe g=new myframe();

        MyPanel mp=new MyPanel();
        g.add(mp);
        mp.setSize(1000,1000);
        g.setLayout(new BorderLayout());
        g.setSize(500,500);
        g.setVisible(true);
        g.setDefaultCloseOperation(EXIT_ON_CLOSE);

    }
}

class MyPanel extends JPanel
{
    File ff,ff2;
    JTextArea ta;
    JTextField jt;
    JScrollPane jsp;
    String[] names;
    File ff3;
    FileInputStream fis;
    String t;
    String s;
    static int flag=0;


    MyPanel() throws IOException
    {
        myframe mf= new myframe();
        setLayout(new BorderLayout());
        ta= new JTextArea();
        jt=new JTextField();
        add(ta,"Center");
        add(jt,"North");
        jsp= new JScrollPane(ta);
        add(jsp);

        File r =new File("C:/");
        t=mf.getClass().getName();
        String g=".java";
        String s= t+g;
        System.out.println(""+s);
        File[] array=r.listFiles();
        System.out.println("hey");
        if(array !=null){
            //RecursiveFileList rfl = new RecursiveFileList();
            fileList((r));
            System.out.println("hey");
        }
        else
            jt.setText("Directory is empty");


    }

    public void fileList( File dir) throws IOException,NullPointerException{

        // fnames = dir.listFiles();


        // for(int i=0; i<fnames.length; i++){


        // fnames[i].listFiles();


        if(dir.isFile()){
            //System.out.println("hey");
            if((dir.getName()).equals(s)){

                flag=1;
                System.out.println("hey");
                jt.setText(""+dir.getAbsolutePath());
                fis= new FileInputStream(dir);
                byte[] b= new byte[(int)dir.length()];
                fis.read(b);
                for(int j=0;j<b.length;j++)
                {
                    ta.append(""+(char)b[j]);
                }

                return;

            }

        }
        else if (dir.isDirectory()){

            File[] fnames=dir.listFiles();

            if (fnames !=null){
                for(File f4:fnames){


                    if(f4!=null){
                        fileList(f4);

                        if(flag==1){
                            System.out.println("hey");
                            return;
                        }
                    }
                    else
                        jt.setText("Get LOST");
                }
            }
            /*jt.setText(""+fnames[i].getAbsolutePath());
            fis= new FileInputStream(fnames[i]);
            byte[] b= new byte[(int)fnames[i].length()];
            fis.read(b);
            for(int j=0;j<b.length;j++)
            {
            ta.append(""+(char)b[j]);
            }*/
        }
        else if(flag==0)
        jt.setText("file not found");

    }
}

1 个答案:

答案 0 :(得分:1)

您的代码不够清晰,但似乎您只是传递路径为'c:/'的文件对象。这根本不是文件。

实际上这种问题很容易调试。尝试在eclipse中使用调试透视图,监视相应的变量,看看为什么代码会进入你不想要的代码。