急!100求:如何使一个代码块所有的语句都能成功,否则就不执行?
比如我要移动文件
有三个文件需要同时移动
如果有一个移动不成功则另外两个也不移动
问题点数:100、回复次数:13Top
1 楼MYLiao(醉书生)回复于 2004-12-01 15:01:01 得分 4
没做过,帮顶Top
2 楼kenli(爱祝福网(http://www.izhufu.com/))回复于 2004-12-01 15:06:00 得分 10
估计你要做一个rollback,在做之前记录你的状态,如果万一失败就要rollback到以前的状态。Top
3 楼dawnwang(晓风)回复于 2004-12-01 15:07:29 得分 5
靠,这不是典型的事务处理吗,可惜我不会,我只会一个传不成功就将成功的删除掉.Top
4 楼cnfalcon(中国猎鹰)回复于 2004-12-01 15:09:39 得分 30
先复制文件到目标文件夹,如果三个文件都复制成功,删除原有文件;如果有文件没有复制成功,删除目标文件夹中已复制的文件。Top
5 楼drugon(更高,更远,更强)回复于 2004-12-01 15:33:23 得分 30
对于文件流来说,只能是先复制文件到目标文件夹,如果三个文件都复制成功,删除原有文件;如果有文件没有复制成功,删除目标文件夹中已复制的文件。Top
6 楼lidi3503(我来也)回复于 2004-12-01 15:42:41 得分 5
同意楼上的,如果你的要处理的问题就是文件复制的问题,这样处理就行了,再复杂就得用到事物的回滚机制了.Top
7 楼whyxx(最近有点闲)回复于 2004-12-01 16:04:16 得分 5
用程序将三个文件压缩后再移过去解压,又省空间,又能解决你这个问题Top
8 楼haroyy(天平)回复于 2004-12-01 16:56:59 得分 5
cnfalcon(中国猎鹰) 的方法最好了Top
9 楼tom2005(随海奔跑)回复于 2004-12-01 17:04:29 得分 2
upTop
10 楼samue(下弦月)回复于 2004-12-01 17:05:39 得分 2
做成事务就好了啊Top
11 楼catblue(佛家说:一粒沙中看世界。)回复于 2004-12-01 17:09:07 得分 2
up 同意楼上的看法Top
12 楼gaochao79(www.informe.cn)回复于 2004-12-02 13:51:27 得分 0
谢谢大家的指点,下面我把问题说清楚
我移动文件的方法是:
public static boolean move(String input, String output) {
File inputFile = new File(input);
File outputFile = new File(output);
return inputFile.renameTo(outputFile);
}
现在我要同时移动三个相关的文件,同时为他们改名。
但是这个函数常常有不成功的情况出现。
就是原文件还留在那里新文件没有生成。
如果只有一个成功那么就没有意义了
而且破坏了这一组文件的完整性
因为改名后很难知道那个移动成功文件是和剩下的文件一组的。
下面是我写的拷贝文件的方法,这个方法在我所做的上百次测试中是百分之百成功的。
但是它有一个缺点:虽然已经使用了缓存,比不用缓存快很多,但是还是比上面移动文件的方法慢很多。
public static void myBufferedCopy(String oldfile, String newfile) {
FileInputStream is = null;
FileOutputStream os = null;
try {
is = new FileInputStream(oldfile);
os = new FileOutputStream(newfile);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream(is);
BufferedOutputStream bos = new BufferedOutputStream(os);
int n;
try {
while ((n = bis.read()) != -1) {
bos.write(n);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
is.close();
os.close();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
兄弟们什么意见?Top
13 楼gaochao79(www.informe.cn)回复于 2004-12-02 14:05:55 得分 0
我也是想做成事务,但是我对事务不是很理解,请兄弟们指点,最好给出代码实例。Top




