篇一:java中多线程操作文件的复制及剪切

方法,重命名此抽象路径名表示的文件。相当于剪切并且重命名。但是此方法是与平台相关的,重命名操作无法将一个文件从一个文件系统移动到另外一个文件系统。这是导致文件操作失败的原因之一,还有的一个可能原因是:目标路径已经存在此文件。

如果

如果

oldFile和newFile存在于不同的文件系统,则flag会返回false newFIle已经存在,则flag会返回false

在需要跨平台且文件比较大的时候,采用多线程进行文件传输是不错的选择。以下为具体方法:

根据文件大小( x 字节),启动 n 个线程( n = x/ β , β为常量),每个线程 i 以共享方式打开文件,从第 i* β个字节处开始读取。

写入文件同理,先创建 x 大小的文件,然后每个线程往第 i* β个字节处写入。

n 的数量不能太多,常量β的值很重要,是可以配置的,一般设置为 20m。

具体操作代码如下:

篇二:java实验报告多线程异常处理

信 息 工 程 学 院

Java程序设计 实习报告

多线程异常处理

1.实验目的

(1) 掌握Java的异常处理机制及相关实现方法能够在程序设计中熟练运用异常及相关类及

对象;

(2) 掌握Java多线程的概念和实现方法;

(3) 掌握Java多线程的同步问题;

2.实验内容

实验题1 创建两个线程,一个线程打印“A”,另一个线程打印“B”,比如ABBABAABBA….

主要代码:

package package1;

public class TestThread {

}

package package1;

/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Printout A_Print = new Printout('A'); Printout B_Print = new Printout('B'); A_Print.start(); B_Print.start(); }

实验报告的内容与格式按任课教师的要求书写。

public class Printout extends Thread {

public char out;

Printout(char temp){

}

} public void run(){ } for(int i=0;i<5;i++){ System.out.print(out); } out = temp;

运行结果:

实验题 2 假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。输出格式如下:

第4售票点卖出第100张票

第2售票点卖出第101张票 ??

主要代码:

package package2;

public class SellTicket extends Thread{

int Sellnum; static int Ticketnum = 0; SellTicket(int index){

} Sellnum = index; public void run(){ while(true){ synchronized(this){ if(Ticketnum<1000){ Ticketnum++; System.out.println("第"+Sellnum+"售票点卖出第

"+Ticketnum+"张票");

} } }} } else{ } try{Thread.sleep(500); } catch(InterruptedException e){} break; //return 1;

运行结果:

实验题3 假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款

的总额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。

程序如下:

class CBank

{ private static int sum=0;

public static void add(int n){

int tmp=sum;

tmp=tmp+n;// 累加汇款总额

try{

Thread.sleep((int)(10000*Math.random())); // 小睡几秒钟 }

catch(InterruptedException e){}

sum=tmp;

System.out.println("sum= "+sum);

}

}

class CCustomer extends Thread // CCustomer类,继承自Thread类

{ public void run(){ // run() method

for(int i=1;i<=3;i++)

CBank.add(100); // 将100元分三次汇入

}

}

public class Ex6_1

{public static void main(String args[])

{ CCustomer c1=new CCustomer();

CCustomer c2=new CCustomer();

c1.start();c2.start();

}

}

[基本要求] 运行程序5次,观察每次运行结果是否相同。

运行结果:

结果1 结果2 结果

3

结果4结果5

[思考问题] 程序运行结果每次是否相同,运行时间是否相同,为什么? 答:在add()函数前加synchronized关键字。

② 程序中为什么要使用异常处理?

答:程序调用了sleep()函数,可能被中断,产生异常。

篇三:JAVA 多线程文件拷贝

import java.io.*;

importimportpublicclassFileOperationimplements Runnable{

publicvoid run(){

synchronized(""){

fileCopy("E:\\计算机应用", "C:/Users/Jiangjin/Desktop");}

}

booleanfileCopy(String oldpath,Stringnewpath){

File srcfile=new File(oldpath);//原文件绝对路径

File destfile=new File(newpath+"/"+srcfile.getName());//新文件的文件路劲

if(!srcfile.exists())

returnfalse;

elseif(srcfile.isDirectory()){//如果是文件夹,则进行递归调用 if(!destfile.exists())

destfile.mkdir();

File allfile[]=srcfile.listFiles();

for(File x: allfile){

fileCopy(x.getAbsolutePath(),destfile.getAbsolutePath()); }

}

else {//如果是文件,则复制

try{

if(!destfile.exists()){

destfile.createNewFile();

FileInputStream in=newFileInputStream(srcfile);byte by[]=newbyte[(int)srcfile.length()];in.read(by);

FileOutputStream

out=newFileOutputStream(destfile);

out.write(by);

in.close();

out.close();

}

}catch(Exception e){

e.getMessage();

}

}

System.out.println(System.currentTimeMillis()/1000);returntrue;

}

publicstaticvoid main(String args[]){

System.out.println(System.currentTimeMillis()/1000);FileOperation file=newFileOperation();

file.fileCopy("E:\\计算机应用",

"C:/Users/Jiangjin/Desktop");//将文件复制到桌面

Thread t=newThread(newFileOperation());

t.start();

Thread t1=newThread(newFileOperation());

t1.start();

Thread t2=newThread(newFileOperation());

t2.start();

Thread t3=newThread(newFileOperation());

t3.start();

Thread t4=newThread(newFileOperation());

t4.start();

Thread t5=newThread(newFileOperation());

t5.start();

Thread t6=newThread(newFileOperation());

t6.start();

Thread t7=newThread(newFileOperation());

t7.start();

//System.out.println(System.currentTimeMillis()/1000); }

}

篇四:java多线程中的异常处理

在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束。但是线程依然有可能抛出unchecked exception,当此类异常跑抛出时,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM的这种设计源自于这样一种理念:“线程是独立执行的代码片断,线程的问题应该由线程自己来解决,而不要委托到外部。”基于这样的设计理念,在Java中,线程方法的异常(无论是checked还是unchecked exception),都应该在线程代码边界之内(run方法内)进行try catch并处理掉.

但如果线程确实没有自己try catch某个unchecked exception,而我们又想在线程代码边界之外(run方法之外)来捕获和处理这个异常的话,java为我们提供了一种线程内发生异常时能够在线程代码边界之外处理异常的回调机制,即Thread对象提供的setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)方法。

通过该方法给某个thread设置一个UncaughtExceptionHandler,可以确保在该线程出现异常时能通过回调UncaughtExceptionHandler接口的public void uncaughtException(Thread t, Throwable e) 方法来处理异常,这样的好处或者说目的是可以在线程代码边界之外(Thread的run()方法之外),有一个地方能处理未捕获异常。但是要特别明确的是:虽然是在回调方法中处理异常,但这个回调方法在执行时依然还在抛出异常的这个线程中!

比之上述方法,还有一种编程上的处理方式可以借鉴,即,有时候主线程的调用方可能只是想知道子线程执行过程中发生过哪些异常,而不一定会处理或是立即处理,那么发起子线程的方法可以把子线程抛出的异常实例收集起来作为一个Exception的List返回给调用方,由调用方来根据异常情况决定如何应对。不过要特别注意的是,此时子线程早以终结。

java线程 对文件copy 可能删除了 报异常_java线程对文件copy可能删除了报异常相关推荐

  1. java异常_Java线程池「异常处理」正确姿势:有病就得治

    假设我们有一个线程池,由于程序需要,我们向该线程池中提交了好多好多任务,但是 这些任务都没有对异常进行try catch处理,并且运行的时候都抛出了异常 .这会对线程池的运行带来什么影响? 正确答案是 ...

  2. java runnable 异常_JAVA 线程中的异常捕获

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

  3. java 导出excel打开报错_java导出excel文件报“失败-网络错误”

    问题描述 用IP访问单个服务器去下载excel文件正常,访问F5去下载的时候报"失败-网络错误" 项目截图(必填) 运行截图(必填) 相关代码片段 response.reset() ...

  4. qt 从文件中读出数据显示在表格中_java如何从文件中读取数据存在数组再显示在表格中!!...

    再谢谢你昨天帮我解决了那个读数据再显示在JTextArea中,现在我想显示在表格中啦!而且对应显示!数据一行一行读,再存在arraylist中数据:何子杨13580130150652150计算机丁香维 ...

  5. java web 默认页面配置文件_Tomcat中配置全局的错误页面(如404)+删除Tomcat中webapps目录下的自带项目,防止Tomcat默认文件泄露...

    进入tomcat目录中conf文件编辑web.xml,将下面代码复制到文件末尾,如下 400 /error.html 404 /404/404.html 500 /404/500.html 2.添加4 ...

  6. java中怎么剪切文件_java中实现文件复制、剪切和删除

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...

  7. java 删除指定目录_Java 删除目录 指定文件

    package delete; import java.io.File; /** * 删除文件操作 * @author zengpan * */ public class DeleteFileTest ...

  8. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...

    org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...

  9. java删除相对路径文件夹_Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录...

    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator// F ...

最新文章

  1. Python3创建目录文件夹
  2. Android 实现闹钟功能
  3. Vue:Vue和ECharts,在Vue上进行可视化处理,在Vue上画图
  4. oracle的undo表空间不足,undo表空间不足,ORA-30036 unable to extend segment by ...
  5. 卡尔曼滤波算法 C语言实现
  6. 如何建立低科技互联网
  7. 中国石油燃气蓄能器市场深度研究分析报告(2021)
  8. 桌面图标有阴影的解决方法
  9. linux下socket编程常用头文件
  10. 实力认证!Coremail连续9次入围安全牛《中国网络安全行业全景图》
  11. 工欲善其事,必先利其器-IntelliJ IDEA
  12. python 简单易懂的验证码识别
  13. php k线15分钟 30分钟,成功率极高的“分时K线战法”:15分钟K线战法+30分钟K线战法...
  14. 揣着一口袋的阳光满载而归--爱摸鱼的美工(13)
  15. js获取从指定年份到当前年份的年份数据集合
  16. VLOOKUP函数最常用的10种用法
  17. 【Mybatis系列】之插件—自动填充字段插件,再也不需要手动填写或者耦合业务了!
  18. html avatar属性,CSS自定义属性在组件开发中的使用
  19. 【已解决】群晖6.x套件中心找不到花生壳套件
  20. 计算机考试试题库带答案

热门文章

  1. HTC Vive会是HTC的下一个增长引擎吗?
  2. 【转】 ubuntu12.04更新源 官网和163等
  3. 使用telnet命令验证邮箱
  4. eclipse性能优化
  5. 用WMI修改计算机名和IP
  6. 不是碰不到更好的,是因为已经有了你!
  7. gentoo doc web site
  8. 金融领域下的数据挖掘算法应用:逻辑回归模型
  9. python 不同集合上元素的迭代 chain()
  10. 第15章 SpringBoot集成logging日志