现在我用一个String[]去获取一个文件夹下的所有jpg文件的文件名,但是每次最多只可以放入2672个文件,这是由于String[]本身限制的吗?

解决方案 »

  1.   

    我个人觉得应该不能超过Integer.MAX_VALUE。
      

  2.   

    你是怎么定义STRING数组的   可能是不定义有问题(限制了它的长度)!
      

  3.   

    /**
     * project_name: Test
     * package_name: CSDN_Test_20071126
     * package_declaration: package CSDN_Test_20071126;
     * filename: StringLengthTest.java
     * author: yuhaiming
     * date: 2007-11-26
     */
    package CSDN_Test_20071126;public class StringLengthTest { /**
     * @param args
     */
    public static void main(String[] args) {
    //Integer.MAX_VALUE=2147483646
    //String[] str = new String[Integer.MAX_VALUE];这么定义肯定超出内存

    String[] str = new String[2673];
    str[2672]="test";
    System.out.println(str[2672]);
    }}
      

  4.   

    就是这段代码,在导入一个文件夹下面的JPG文件的时候总是导入到2672个文件后停止,而且没有任何报错import java.io.*;
    //import java.*;
    //import java.lang.*;
    import java.sql.SQLException;
    public class PixInput {
    /**
     * @param string
     * @throws ClassNotFoundException 
     * @throws SQLException 
     * @throws SQLException 
     */
     
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
     if (args.length==0){ //判读路径是否为空
      System.out.println("Please input the path");//返回空值错误
      }else{
    System.out.println("开始导入路径:"+args[0]);//开始导入提示
    java.lang.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//创建ODBC连接
    java.sql.Connection con = null;//声明连接con
    try {
    con=java.sql.DriverManager.getConnection("jdbc:odbc:pixputin", "sa", "");//设置连接
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    System.out.println("SQLException error...");
    e.printStackTrace();
    }
    java.sql.Statement stmt = null;
    try {
    stmt=con.createStatement();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    System.out.println("SQLException1 error...");
    e.printStackTrace();
    }
    int result;
    java.lang.String filename;
    File inputpath=new File(args[0]);//路径文件赋值
    File tempinput;//设置循环用文件
    if (inputpath.exists()){
    System.out.println("路径检查正确,开始导入...");

    //String[] filelist1=inputpath.list();
    for (int i=0;i<inputpath.list().length;i++)
    {
    filename=inputpath.list()[i];
    tempinput=new File(filename);//循环文件赋值
    if (tempinput.isDirectory()) {

    } else{

    if ( filename.endsWith("jpg")){
    // filename.substring(filename.length()-4, 4)==".jpg") {

     System.out.println("正在导入文件:"+inputpath.list()[i]);
     result=stmt.executeUpdate("insert into cp(cpbh) values('"+filename.substring(0,filename.length()-4)+"')");
     if (result==1) {System.out.println("导入成功!");}

    }
    } }
    }else{
    System.out.println("路径:"+args[0]+"不存在,请检查");
    }
    stmt.close();
    con.close();
    }
    }
    }
      

  5.   

    把inputpath.list()放到循环外面来做。
      

  6.   

    把inputpath.list()放到循环外面来做。
    =============================
    就是说在循环体外面先把inputpath.list()给了另外一个String()[]吗?
      

  7.   

    先把目录下文件全取出来放到File[]数组中,再对这些文件进行操作
      

  8.   

    同意上楼的观点:
       * cocosunshine
    发表于:2007-11-26 15:46:032楼 得分:0
    我个人觉得应该不能超过Integer.MAX_VALUE。
      

  9.   

    还是有问题,最终在循环的时候还是要获取到究竟有多少个文件啊,所有inputpath.list().length()肯定是要被用到的啊,如果这个错了是不是就没有办法了?
      

  10.   

    汗。你在循环外面得到一个文件的数组。然后循环时判断那个数组的长度就可以了啊
    File[] files=inputpath.listFiles();
    for (int i=0;i<files.length;i++)
    {
    //.....
    }
    你这样写,每次都要执行inputpath.list()操作,相当于每次都读硬盘资源,很费时的。
      

  11.   

    数组下标是int,最大长度应该不能超过Integer.MAX_VALUE
    其实基本取决于内存限制...
      

  12.   

    java 中数组 需要指定元素开辟空间,元素个数是整型(不能Long),故最大元素为
    Integer.MAX_VALUE = 2147483647