0

このメソッドで、ディレクトリ内のすべてのファイル名を含む文字列のリストを返すようにしたいと考えています。私が宣言したリストは、メソッドから null として返されます。誰かが理由を知っていますか?以下に投稿されたコードスニペット。

   public static String docxList() {
        String path1 = "E:\\";
        String files = null;
        String display = null;
        String dpmt=null;

    //String variables declaration,
    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");   
        java.sql.Connection 
        con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","user","pass");
        //Database connection Code
        PreparedStatement ps=con.prepareStatement("select * from EMP_DB where EMP_ID='EI-12'");
        ResultSet rs=ps.executeQuery();
        rs.next();
        dpmt=rs.getString("DEPARTMENT");

        path1 =path1+dpmt; //New path generation of specific directory according to user department

        File folder = new File(path1);
        File[] listOfFiles = folder.listFiles();
        for (int i = 0; i < listOfFiles.length; i++)
        {
            if (listOfFiles[i].isFile())
            {
                files = listOfFiles[i].getName();
                String filename=files;
                if(filename.indexOf(".")>0)
                {
                    filename=files.substring(0,files.lastIndexOf("."));
                }

                display=('<'+"A HREF"+'='+"\""+"PDFs/"+dpmt+"/"+files+"\""+" "+"target"+'='+"\""+"targetiframe"+"\""+'>'+'<'+"font"+" size"+'='+"\"4\""+" color"+'='+"\"white\""+'>'+filename+"</font>"+"<"+"/A"+'>');
                //Hyper-linked list of files. 
                ArrayList<String> al=new ArrayList<String>();
                al.add(display);
                //Adding all file names in a directory to a Arraylist.      
            }
        }
    }
    catch(Exception ex) 
    {
        System.out.print("Exception: "+ex+" in Dpmt Method.");  
        //Exception Display if any.
    }                                   

    return al; //ArrayList doesn't generate list of files in the drectory.
}
4

2 に答える 2

3

return ステートメントからは見えないスコープで配列リストを宣言します。forループの前に次のステートメントを配置します。

ArrayList<String> al = new ArrayList<String>();

だから、それはこのようになります-

File[] listOfFiles = folder.listFiles();
ArrayList<String> al = new ArrayList<String>();

for (int i = 0; i < listOfFiles.length; i++)

.. コードの残りの部分 ..

編集:

また、メソッド シグネチャを変更して、文字列ではなくリストを返す必要があります。

public static ArrayList<String> docxList()
于 2013-11-07T11:34:30.390 に答える
0

return ステートメントのスコープ内にあるようにList<String>、ブロックの外側で宣言する必要があります。try/catchまた、戻り値の型は現在String、 a を返そうとしているときであるList<String>ため、実際に a を返したい場合は、これも変更する必要がありますList。メソッドは次のようになります。

public static List<String> docxList() {
    String path1 = "E:\\";
    String files = null;
    String display = null;
    String dpmt=null;
    List<String> al = new ArrayList<String>();

    try { 
        // code... 
    }
    catch(Exception ex) {
        // handle exception..
    }                                   

    return al; 
}
于 2013-11-07T11:40:52.707 に答える