原来是这样,把读取各个文件数据放到一个list,一个个定义路径读取插入数据库代码如下
String readX = "E:/typhoon/lat.dat";
String readY = "E:/typhoon/lon.dat";
String readWD = "E:/typhoon/t2.dat";
List<String> Xlist = getData(readX);
List<String> Ylist = getData(readY);
List<String> WDlist = getData(readWD);
int n = 0;
for (; n <(Xlist.size()); n++) {
ps = conn
.prepareStatement("insert into TFYJ_RCTQ_YC(id,sb,x,y,wd) values(?,?,?,?,?)"); ps.setLong(1, n+1);
ps.setString(2, "2011-11-10");
ps.setObject(3, Xlist.get(n));
ps.setObject(4, Ylist.get(n));
ps.setObject(5, WDlist.get(n));
ps.addBatch();
ps.executeBatch();
ps.clearBatch();
ps.close();
}
如果改为循环读取一个目录下的所有文件数据放入list再插入数据库 ,代码如下,那些问号处该怎么填写。String dir = "E:/typhoon";
File file = new File(dir);
if (file.isDirectory()) {
String[] filelist = file.list();
List<String> list = new ArrayList<String>();
for (int i = 0; i < filelist.length; i++) {

List<String>  ???= getData(dir + "\\" + filelist[i]);//得到第i个文件中的数据

}

int n = 0;
for (; n < (filelist[n].length()); n++) {
ps = conn
.prepareStatement("insert into TFYJ_RCTQ_YC(id,sb,x,y,wd) values(?,?,?,?,?)"); ps.setLong(1, n + 1);
ps.setString(2, "2011-11-10");
ps.setObject(3, ???.get(n));
ps.setObject(4, ???.get(n));
ps.setObject(5, ???.get(n));
ps.addBatch();
ps.executeBatch();
ps.clearBatch();
ps.close();
}

解决方案 »

  1.   


    用list不好实现了。。因为数据无法拆分出来。。只能通过键值对的方式。。下面我的map。 // 如果只有三个文件的话,,下面的方法就可以了
    public static Map<Integer, List<String>> fileData(){

    String dir = "E:/typhoon";
    File file = new File(dir);
    if (file.isDirectory()) {
    String[] filelist = file.list();
    Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
    List<String> list = new ArrayList<String>();
    for (int i = 0; i < filelist.length; i++) {
    List<String> listData = getData(dir + "\\" + filelist[i]); // 得到第i个文件中的数据
    map.put(i+1, listData);
    } int m = map.get(0).size(); // 取第一个list
    int n = 0;
    for (; n < m; n++) {
    ps = conn.prepareStatement("insert into TFYJ_RCTQ_YC(id,sb,x,y,wd) values(?,?,?,?,?)");
    ps.setLong(1, n + 1);
    ps.setString(2, "2011-11-10");
    ps.setObject(3, map.get(1).get(n));
    ps.setObject(4, map.get(2).get(n));
    ps.setObject(5, map.get(3).get(n));
    ps.addBatch();
    ps.executeBatch();
    ps.clearBatch();
    ps.close(); }
    }
    }
      

  2.   

    // 如果你那个目录下的文件里面的内容全是整合到
    String readX = "E:/typhoon/lat.dat";
     String readY = "E:/typhoon/lon.dat";
     String readWD = "E:/typhoon/t2.dat";
    这三个文件内容的话, 就好办, 
    如果不是, 例如正面还有个文件t1.dat, 跟你的t2.dat内容是一样的话, 就不知道怎么弄咯,List<String[]> list = getData(dir + "\\" + filelist[i]); 
    // 这方法返回一个数组, 分别包含lat.dat, lon.dat, t2.dat" ps.setObject(3, list.get(n)[0]);
     ps.setObject(4, list.get(n)[1]);
     ps.setObject(5, list.get(n)[2]);
      

  3.   

    list为有序集合存放的是单一对象
    set为无序集合存放单一对象
    map存放的是关系,及key和value若有多个值可以用以上几个类的嵌套来实现
      

  4.   

    如果根据目录下的文件名去读取呢 ,符合某个名的文件 调用什么sql语句??
      

  5.   

    for example
    String dir = "E:/typhoon";
    File file = new File(dir);
    if (file.isDirectory()) {
    String[] filelist = file.list();
    List<List<String>> list = new ArrayList<String>();
    for (int i = 0; i < filelist.length; i++) {List<String> fList = getData(dir + "\\" + filelist[i]);//得到第i个文件中的数据
    list.add(flist);}int n = 0;
    for (; n < list.get(0).size(); n++) {
    ps = conn
    .prepareStatement("insert into TFYJ_RCTQ_YC(id,sb,x,y,wd) values(?,?,?,?,?)");ps.setLong(1, n + 1);
    ps.setString(2, "2011-11-10");
    ps.setObject(3, list.get(0).get(n));
    ps.setObject(4, list.get(1).get(n));
    ps.setObject(5, list.get(2).get(n));
    ps.addBatch();
    ps.executeBatch();
    ps.clearBatch();
    ps.close();
    }
      

  6.   

    File file = new File("D://der");
    String f = file.listFiles()
      

  7.   

                     会报异常   java.lang.ArrayIndexOutOfBoundsException: 3
    at read.saveTotalData.main(saveTotalData.java:38)
      

  8.   

    1楼的方法表示赞同,像这种情况用map比用list要方便很多。