新手求指导,关于线程和流

Utopia 2011-07-27 08:31:37
创建一个线程,监视某个目录,一旦目录里出现新的文件,就将文件转移到指定的目录里去。

求方法,求代码,谢谢了
...全文
124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
村南菜园 2011-07-28
  • 打赏
  • 举报
回复
给你两个参考链接:
http://download.oracle.com/javase/tutorial/essential/io/notification.html (英文)
http://xxing22657-yahoo-com-cn.iteye.com/blog/1054496 (中文)
薛大琪 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao251021539 的回复:]

思路和上面差不多我感觉可以用定时任务来写,每隔多久检查一下 ,如果有新文件就转存。
至于判断,可以把文件名存储在一个链表或者什么中,判断两次文件是否相同。
[/Quote]
同意,设置一个定时器,隔几秒执行一次线程…
zl3450341 2011-07-27
  • 打赏
  • 举报
回复
宝哥的示例代码已经很好了。
meran 2011-07-27
  • 打赏
  • 举报
回复
思路和上面差不多我感觉可以用定时任务来写,每隔多久检查一下 ,如果有新文件就转存。
至于判断,可以把文件名存储在一个链表或者什么中,判断两次文件是否相同。
Utopia 2011-07-27
  • 打赏
  • 举报
回复
stop方法不能被重写啊
qybao 2011-07-27
  • 打赏
  • 举报
回复
LZ是要判断新文件啊,那就第一次启动时把原来的文件保存到一个结合中

    public void run() {
File dir = new File(srcdir);
if (!dir.isDirectory()) {
System.out.println("not directory");
return;
}

Set<File> originalFiles = new HashSet<File>();
for (File f : dir.listFiles()) {
orignalFiles.add(f);
}
Set<File> newFiles = new HashSet<File>();
while (running) {
try {
newFiles.clear();
for (File f : dir.listFiles()) {
if (!originalFiles.contains(f)) {
newFiles.add(f);
}
}
if (newFiles.size() > 0) {
StringBuilder cmd = new StringBuilder("move /Y ");
for (File f : newFiles) {
cmd.append(f.getAbsoluteFile().getPath()).append(" ");
}
cmd.append(targetdir + "/.");

Process p = Runtime.getRuntime().exec(cmd.toString());
p.waitFor();
} else {
sleep(1000);
}
} catch (Exception e) {e.printStackTrace();}
}
}
qybao 2011-07-27
  • 打赏
  • 举报
回复
for example
class MonitorThread extends Thread {
String srcdir;
String targetdir;
boolean running = true;
public MonitorThread(String srcdir, String targetdir) {
this.srcdir = srcdir;
this.targetdir = targetdir;
}
public void stop() {this.running = false;}

public void run() {
File dir = new File(srcdir);
while (running) {
try {
if (!dir.isDirectory()) {
System.out.println("not directory");
return;
}
if (dir.listFiles().length() > 0) {
Process p = Runtime.getRuntime().exec("move /Y " + srcdir + "/*.* " + targetdir + "/.");
p.waitFor();
} else {
sleep(1000);
}
} catch (Exception e) {e.printStackTrace();}
}
}
}
Utopia 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 heiboyyang 的回复:]
思路:
1.先创建一个线程(thread)
2.线程负责查看指定目录
3.判断 目录如果不为空说明出现新文件
4.出现新文件 实例化一个file对象 把文件存放到相应的目录
[/Quote]
第3步,如果里面有文件,又出现新文件怎么判断呢
HeiBoyYang 2011-07-27
  • 打赏
  • 举报
回复
思路:
1.先创建一个线程(thread)
2.线程负责查看指定目录
3.判断 目录如果不为空说明出现新文件
4.出现新文件 实例化一个file对象 把文件存放到相应的目录
茫茫大海 2011-07-27
  • 打赏
  • 举报
回复
等待高手。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧