一个关于文件操作的问题,高手指教! 需要从指定目录(例如:d:/infile)下面不停产生文件(别人ftp过来),我要写一个java程序到这个目录下取文件(文件名不知道),然后把文件头加上当前系统时间,然后把处理后的文件放到其他目录(例如:d:\outfile),各位高手指点一二,不胜感激!高分悬赏哦:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个没什么技术含量,google一搜一大堆,自己copy下来做一点小的修改就可以了! 对了,还需要保证两点:1)按放入时间先后取d:/infile下文件,2)别人放的时候你不能同时取。谢谢! 获取目录下的子目录和文件名倒是很简单关键是: 你处理的时机?是不断监测,ftp完一个就处理一个吗? 如果直接操作文件,很难知道文件的具体信息。 如果是隔一段时间就处理一次,就怕有文件还没有传完的时候就开始处理最好能直接从ftpserver处得到信息,等传完一个文件,就处理之,但是有难度。 我本来是想定时间轮流去取的,就是不知道是否会有问题。因为ftp过来的文件量比较大,文件的大小也不确定,所以有一点担心运行中是否会有问题!应用比较急,我又刚转java,请各位多指教。对了获取目录下的子目录和文件名用什么包的什么方法,能不能给一个例子?谢谢啦 masse(当午)我认为完全没有必要两者可以同时进行监听ftpServer的连接和IO,一旦被触发立刻,立刻启动线程同步IO处理(完全以来服务器) (1)如何把d:\src下的文件全部移动到d:\obj下?(2)是否可以定义每次移动文件的数目?(3)是否可以根据文件产生的时间先后移动? java里有个timer类,可以每割一段时间到指定的目录去取文件,然后加上时间戳,在将该文件剪切到另一目录 即使直接从 FTP Server 取信息也没有用。我上午传一半,然后断开,去吃一个饭。FTP Server 管得着吗?因此实际问题是你必须得到上传者的确认,需要另外编程。 ftp一个接一个来么?那就没有同步问题了吧每次除去修改时间最靠后的文件其它全取 并记录 未完成的肯定是修改时间最后一个啊 不过整体最后一个区要特殊一下 应该有某种标志 其实可以完全同步的,现在的没有必要完全等待文件传完再取走Infile只是相当于一个缓冲区,有个缓冲池的算法你可以参考一下不过开始和结束要进行判断 移动、重命名文件可以用renameTo可以 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"); }} double的小数问题 想系统学习一下java,以前没学过;请各位多指点。。。。 如何获取JScrollPane中的JTextArea sqlserver2005可连接系统数据库,但无法连接自己的数据库 如何远程访问数据库 .mdb ? swing中关于图片上传问题 关于 Java 类的动态重编译 新手问题。请问学JAVA,要入门有什么好的书吗/??? 我的作业,谁来帮帮我!! 有关String的小问题 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");
}
}