需要从指定目录(例如:d:/infile)下面不停产生文件(别人ftp过来),
我要写一个java程序到这个目录下取文件(文件名不知道),
然后把文件头加上当前系统时间,然后把处理后的文件放到其他目录(例如:d:\outfile),
各位高手指点一二,不胜感激!高分悬赏哦:)

解决方案 »

  1.   

    这个没什么技术含量,google一搜一大堆,自己copy下来做一点小的修改就可以了!
      

  2.   

    对了,还需要保证两点:
    1)按放入时间先后取d:/infile下文件,
    2)别人放的时候你不能同时取。
    谢谢!
      

  3.   

    获取目录下的子目录和文件名倒是很简单关键是:
      你处理的时机?是不断监测,ftp完一个就处理一个吗?
      如果直接操作文件,很难知道文件的具体信息。
       
      如果是隔一段时间就处理一次,就怕有文件还没有传完的时候就开始处理最好能直接从ftpserver处得到信息,
    等传完一个文件,就处理之,
    但是有难度。
      

  4.   

    我本来是想定时间轮流去取的,就是不知道是否会有问题。
    因为ftp过来的文件量比较大,文件的大小也不确定,
    所以有一点担心运行中是否会有问题!应用比较急,我又刚转java,请各位多指教。
    对了获取目录下的子目录和文件名用什么包的什么方法,能不能给一个例子?谢谢啦
      

  5.   

    masse(当午)
    我认为完全没有必要两者可以同时进行监听ftpServer的连接和IO,一旦被触发立刻,立刻启动线程同步IO处理(完全以来服务器)
      

  6.   

    (1)如何把d:\src下的文件全部移动到d:\obj下?
    (2)是否可以定义每次移动文件的数目?
    (3)是否可以根据文件产生的时间先后移动?
      

  7.   

    java里有个timer类,可以每割一段时间到指定的目录去取文件,然后加上时间戳,在将该文件剪切到另一目录
      

  8.   

    即使直接从 FTP Server 取信息也没有用。我上午传一半,然后断开,去吃一个饭。FTP Server 管得着吗?因此实际问题是你必须得到上传者的确认,需要另外编程。
      

  9.   

    ftp一个接一个来么?那就没有同步问题了吧每次除去修改时间最靠后的文件其它全取 并记录 未完成的肯定是修改时间最后一个啊 不过整体最后一个区要特殊一下 应该有某种标志
      

  10.   

    其实可以完全同步的,现在的没有必要完全等待文件传完再取走
    Infile只是相当于一个缓冲区,有个缓冲池的算法你可以参考一下
    不过开始和结束要进行判断
      

  11.   

    移动、重命名文件可以用renameTo可以
      

  12.   


    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Timer;
    import java.util.TimerTask;public class TransformFile {
    HashMap prepareFiles = new HashMap();;
    Timer timer = new Timer();
    private String folder, targetPath;    public TransformFile(String folder, String targetPath) {
         this.folder = folder;
         this.targetPath = targetPath;
         File t = new File(targetPath);
      if(!t.exists()){
      t.mkdirs();
      }
         File a = new File(folder);
      if(!a.exists()){
      System.out.println("File " + a.getName() + " not exist!");
      timer.cancel();
      }
      else{
      System.out.println("File Transforming Start...");
      timer.schedule(new TransformFileTask(a),0,10000);
      }
        }
        
       class TransformFileTask extends TimerTask 
        {
    File a = new File(folder); TransformFileTask(File a){
    this.a = a;
    }

            public void run() 
            {
             String[] files = a.list();
             for(int i = 0; i < files.length; i++){
             File file = new File(folder + File.separator + files[i]);
             if(prepareFiles.containsKey(files[i])){
             if(((Long)prepareFiles.get(files[i])).equals( 
             new Long(file.length()))){
             try {
    transform(file, targetPath);
    } catch (IOException e) {
    e.printStackTrace();
    }
             }
             else{
             System.out.println(files[i] + " file's size is changing...");
             prepareFiles.remove(files[i]);
             prepareFiles.put(files[i], new Long(file.length()));
             }
             }
             else{
             prepareFiles.put(files[i], new Long(file.length()));
             }
             }
            } private void transform(File file, String path) throws IOException {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        new FileInputStream(file)));
                String line = reader.readLine();
    File target = new File(path + File.separator + file.getName());
    if(target.exists()){
    System.out.println(path + File.separator + file.getName() + " file has been existed!");
    return;
    }
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                        new FileOutputStream(target)));
         Calendar calendar = Calendar.getInstance();
         Date today = calendar.getTime();
         SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                writer.write(fmt.format(today) + "\r\n");
                while (line != null) {
                 writer.write(line);
             writer.write(0x0d);
             writer.write(0x0a);
                    line = reader.readLine();
                }
                reader.close();
                writer.close();
                System.out.println(file.getName() + " file transformed.");
                prepareFiles.remove(file.getName());
    if(!file.delete()){
    System.out.println(file.getName() + " file cannot be deleted!");
    }
    }     
    }   
       
        public static void main(String args[]) throws InterruptedException{
         new TransformFile("d:\\infile", "d:\\temp");
        }
    }