需要从指定目录(例如:d:/infile)下面不停产生文件(别人ftp过来),
我要写一个java程序到这个目录下取文件(文件名不知道),
然后把文件头加上当前系统时间,然后把处理后的文件放到其他目录(例如:d:\outfile),
各位高手指点一二,不胜感激!高分悬赏哦:)
我要写一个java程序到这个目录下取文件(文件名不知道),
然后把文件头加上当前系统时间,然后把处理后的文件放到其他目录(例如:d:\outfile),
各位高手指点一二,不胜感激!高分悬赏哦:)
解决方案 »
- Java 中String转换为HashMap,截取字符串!
- 实现逆矩阵的算法!
- java程序间通信用什么方法
- 招聘JAVA高手和J2EE程序员(杭州中导科技开发有限公司)
- 动态覆盖类的方法;请指教!
- 请问用JAVA怎么查出虚拟机当前可用的内存容量?
- Exception e; e; 后面一个e;是做什末用的?
- 关于InvocationHandler与Proxy的问题
- 求救....rh9下装jdk1.4出现问题。。。。。
- 求SQL Server 2000 JDBC的用法!(高分)
- socket通讯,CPU使用率100%,如何解决
- java.sql.Connection不是一个接口吗?为什么在代码中可以直接用它,它的实现在哪里?
1)按放入时间先后取d:/infile下文件,
2)别人放的时候你不能同时取。
谢谢!
你处理的时机?是不断监测,ftp完一个就处理一个吗?
如果直接操作文件,很难知道文件的具体信息。
如果是隔一段时间就处理一次,就怕有文件还没有传完的时候就开始处理最好能直接从ftpserver处得到信息,
等传完一个文件,就处理之,
但是有难度。
因为ftp过来的文件量比较大,文件的大小也不确定,
所以有一点担心运行中是否会有问题!应用比较急,我又刚转java,请各位多指教。
对了获取目录下的子目录和文件名用什么包的什么方法,能不能给一个例子?谢谢啦
我认为完全没有必要两者可以同时进行监听ftpServer的连接和IO,一旦被触发立刻,立刻启动线程同步IO处理(完全以来服务器)
(2)是否可以定义每次移动文件的数目?
(3)是否可以根据文件产生的时间先后移动?
Infile只是相当于一个缓冲区,有个缓冲池的算法你可以参考一下
不过开始和结束要进行判断
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");
}
}