精华内容
下载资源
问答
  • /*** 删除文件,可以是文件或文件夹**@paramfileName* 要删除的文件名*@return删除成功返回true,否则返回false*/public static booleandelete(String fileName) {File file= newFile(fileName);if (!file.exists())...

    /*** 删除文件,可以是文件或文件夹

    *

    *@paramfileName

    * 要删除的文件名

    *@return删除成功返回true,否则返回false*/

    public static booleandelete(String fileName) {

    File file= newFile(fileName);if (!file.exists()) {

    System.out.println("删除文件失败:" + fileName + "不存在!");return false;

    }else{if(file.isFile())returndeleteFile(fileName);else

    returndeleteDirectory(fileName);

    }

    }/*** 删除单个文件(注意:删除文件之前要关闭文件流)

    *

    *@paramfileName

    * 要删除的文件的文件名

    *@return单个文件删除成功返回true,否则返回false*/

    public static booleandeleteFile(String fileName) {

    File file= newFile(fileName);//如果文件路径所对应的文件存在,并且是一个文件,则直接删除

    if (file.exists() &&file.isFile()) {if(file.delete()) {

    System.out.println("删除单个文件" + fileName + "成功!");return true;

    }else{

    System.out.println("删除单个文件" + fileName + "失败!");return false;

    }

    }else{

    System.out.println("删除单个文件失败:" + fileName + "不存在!");return false;

    }

    }/*** 删除目录及目录下的文件

    *

    *@paramdir

    * 要删除的目录的文件路径

    *@return目录删除成功返回true,否则返回false*/

    public static booleandeleteDirectory(String dir) {//如果dir不以文件分隔符结尾,自动添加文件分隔符

    if (!dir.endsWith(File.separator))

    dir= dir +File.separator;

    File dirFile= newFile(dir);//如果dir对应的文件不存在,或者不是一个目录,则退出

    if ((!dirFile.exists()) || (!dirFile.isDirectory())) {

    System.out.println("删除目录失败:" + dir + "不存在!");return false;

    }boolean flag = true;//删除文件夹中的所有文件包括子目录

    File[] files =dirFile.listFiles();for (int i = 0; i < files.length; i++) {//删除子文件

    if(files[i].isFile()) {

    flag=DeleteFileUtil.deleteFile(files[i].getAbsolutePath());if (!flag)break;

    }//删除子目录

    else if(files[i].isDirectory()) {

    flag=DeleteFileUtil.deleteDirectory(files[i]

    .getAbsolutePath());if (!flag)break;

    }

    }if (!flag) {

    System.out.println("删除目录失败!");return false;

    }//删除当前目录

    if(dirFile.delete()) {

    System.out.println("删除目录" + dir + "成功!");return true;

    }else{return false;

    }

    }

    展开全文
  • 编辑:As Workshop Alex指出,如果您不介意制作临时文件,您可以在阅读时简单地打印出这些行。这允许您使用一个简单的HashSet而不是LinkedHashSet。但是我怀疑你会注意到像这样的I / O绑定操作的区别。

    嗯… 40磅似乎足够小,你可以建立一套线,然后打印出来。这将是比O(n2)I / O工作更快的方式。

    这将是这样的(忽略异常):

    public void stripDuplicatesFromFile(String filename) {

    BufferedReader reader = new BufferedReader(new FileReader(filename));

    Set lines = new HashSet(10000); // maybe should be bigger

    String line;

    while ((line = reader.readLine()) != null) {

    lines.add(line);

    }

    reader.close();

    BufferedWriter writer = new BufferedWriter(new FileWriter(filename));

    for (String unique : lines) {

    writer.write(unique);

    writer.newLine();

    }

    writer.close();

    }

    如果顺序很重要,您可以使用LinkedHashSet而不是HashSet。由于元素是通过引用存储的,因此与实际的数据量相比,额外的链表的开销应该是微不足道的。

    编辑:As Workshop Alex指出,如果您不介意制作临时文件,您可以在阅读时简单地打印出这些行。这允许您使用一个简单的HashSet而不是LinkedHashSet。但是我怀疑你会注意到像这样的I / O绑定操作的区别。

    展开全文
  • 如何删除java中的zip文件? file.delete方法返回false。为什么?在java中解压缩后删除zip文件File file = new File("/mibook/"+mFilename+"/"+mZipname.toString());boolean deleted = file.delete();编辑:规则...

    如何删除java中的zip文件? file.delete方法返回false。为什么?在java中解压缩后删除zip文件

    File file = new File("/mibook/"+mFilename+"/"+mZipname.toString());

    boolean deleted = file.delete();

    编辑:

    规则“目录应该删除之前清空。”它适用于压缩文件?

    我的文件解压码

    public void unzip() throws IOException {

    FileInputStream fin=null;

    ZipInputStream zin=null;

    File file =null;

    ZipEntry ze ;

    FileOutputStream fout=null;

    try{

    System.out.println(_zipFile);

    System.out.println(_location);

    fin = new FileInputStream(_zipFile);

    zin = new ZipInputStream(fin);

    ze= null;

    byte[] buffer = new byte[1024];

    int length;

    while ((ze = zin.getNextEntry()) != null) {

    file = new File((_location +"/" + ze.getName()));

    file.getParentFile().mkdirs();

    fout= new FileOutputStream(_location + ze.getName());

    while ((length = zin.read(buffer))>0) {

    fout.write(buffer, 0, length);

    }

    zin.closeEntry();

    fout.close();

    }

    zin.close();

    }catch(Exception e) {

    Log.e("Decompress", "unzip", e);

    }

    finally {

    fin.close();

    zin.close();

    fout.close();

    }

    }

    2011-03-07

    vnshetty

    +1

    请发表您已经使用的代码。 –

    2011-03-07 06:26:37

    +0

    @Abhinav:编辑我的问题 –

    2011-03-07 06:32:36

    +1

    为了更快地获得更好的帮助,请发布SSCCE(http://pscode.org/sscce.html)。考虑到问题代码下载Zip,您可以使用我的站点上的basicservice.zip文件(http://pscode.org/jws/api.html#bs),它小于3Kb。 –

    2011-03-07 06:45:25

    展开全文
  • 目录:第一部分:Java网络编程知识(一)简单的Http请求一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6.IP地址是一个32位整数,一般分成4个八位二进制,为了方便记忆一般...

    目录:

    第一部分:Java网络编程知识

    (一)简单的Http请求

    一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6.

    IP地址是一个32位整数,一般分成4个八位二进制,为了方便记忆一般将八位整数换算为一个0-255的十进制整数。

    8f900a89c6347c561fdf2122f13be562.pngInetAddressTest

    利用Http的这些知识就可以实现一个多线程下载器,以及爬虫的基础向web站点发送GET/POST请求:

    (1)一个简单的多线程下载器

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 import java.net.*;2 importjava.io.RandomAccessFile;3 importjava.io.InputStream;4 public classDownUtil5 {6 //下载路径

    7 privateString path;8 //指定下载文件存储的位置

    9 privateString targetFile;10 //定义使用多少线程下载

    11 private intthreadNum;12 //定义下载线程对象

    13 privateDownThread[] threads;14 //定义下载文件的总大小

    15 private intfileSize;16

    17 public DownUtil(String path,String target,intthreadNum)18 {19 this.path =path;20 this.targetFile=target;21 this.threadNum=threadNum;22 //初始化threads数组

    23 threads=newDownThread[threadNum];24 }25 public void download() throwsException26 {27 URL url = newURL(path);28 HttpURLConnection conn =(HttpURLConnection) url.openConnection();29 conn.setConnectTimeout(5*1000);30 conn.setRequestMethod("GET");31 conn.setRequestProperty(32 "Accept",33 "image/gift,image/jpeg,image/pjpeg,image/pjpeg"

    34 +"application/x-shockwave-flash,application/xaml+xml"

    35 +"application/vnd.ms-xpsdocument,application/x-ms-xbap"

    36 +"application/x-ms-application,application/vnd.ms-excel"

    37 +"application/vnd.ms-powerpoint,application/msword,*/*"

    38 );39 conn.setRequestProperty("Accept-Language","zh-CN");40 conn.setRequestProperty("Charset","UTF-8");41 conn.setRequestProperty("Connection","Keep-Alive");42 //获得文件大小

    43 fileSize =conn.getContentLength();44 conn.disconnect();45 int currentPartSize=fileSize/threadNum+1;46 RandomAccessFile file = new RandomAccessFile(targetFile,"rw");47 //设置本地文件大小

    48 file.setLength(fileSize);49 file.close();50 for(int i=0;i

    53 int startPos = i*currentPartSize;54 //每个线程使用一个RandomAccessFile下载

    55 RandomAccessFile currentPart=new RandomAccessFile(targetFile,"rw");56 //定位线程下载的位置

    57 currentPart.seek(startPos);58 //创建下载线程

    59 threads[i]=newDownThread(startPos,currentPartSize,currentPart);60 //启动线程

    61 threads[i].start();62 }63 }64 //获取下载的完成比

    65 public doublegetCompleteRate()66 {67 //统计多个线程已经下载的总大小

    68 int sumSize=0;69 for(int i=0;i

    78 private intstartPos;79 //当前线程负责下载的文件的大小

    80 private intcurrentPartSize;81 //当前线程需要下载文件块

    82 privateRandomAccessFile currentPart;83 //定义该现场当前已经下载的字节数

    84 public intlength;85 public DownThread(int startPos,intcurrentPartSize,RandomAccessFile currentPart)86 {87 this.startPos=startPos;88 this.currentPartSize=currentPartSize;89 this.currentPart=currentPart;90 }91 public voidrun()92 {93 try

    94 {95 URL url = newURL(path);96 HttpURLConnection conn =(HttpURLConnection) url.openConnection();97 conn.setConnectTimeout(5*1000);98 conn.setRequestMethod("GET");99 conn.setRequestProperty(100 "Accept",101 "image/gift,image/jpeg,image/pjpeg,image/pjpeg"

    102 +"application/x-shockwave-flash,application/xaml+xml"

    103 +"application/vnd.ms-xpsdocument,application/x-ms-xbap"

    104 +"application/x-ms-application,application/vnd.ms-excel"

    105 +"application/vnd.ms-powerpoint,application/msword,*/*"

    106 );107 conn.setRequestProperty("Accept-Language","zh-CN");108 conn.setRequestProperty("Charset","UTF-8");109 InputStream inStream=conn.getInputStream();110 //跳过startPos个字节,只下载自己负责的那部分文件

    111 inStream.skip(this.startPos);112 byte[] buffer=new byte[1024];113 int hasRead=0;114 //读取网络数据,并写入文件

    115 while(length

    View Code

    (2)发生GET/POST请求

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 importjava.net.URLConnection;2 importjava.net.URL;3 importjava.util.Map;4 importjava.util.List;5 importjava.io.BufferedReader;6 importjava.io.InputStreamReader;7 importjava.io.PrintWriter;8 classGetPostTest9 {10 /**

    11 *想指定URL发送GET请求12 *@paramurl 发送请求的URL13 *@paramparam 请求参数,格式满足key=value&key2=value2的形式14 *@returnURL 代表远程资源的响应15 */

    16 public staticString sendGet(String url,String param)17 {18 String result = "";19 String urlName=url+"?"+param;20 try

    21 {22 URL realUrl=newURL(urlName);23 //打开和URL之间的连接

    24 URLConnection conn=realUrl.openConnection();25 //设置通用的请求属性

    26 conn.setRequestProperty("accept","*/*");27 conn.setRequestProperty("connection","Keep-Alive");28 conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2906.0 Safari/537.36");29 //建立实际链接

    30 conn.connect();31 Map> map =conn.getHeaderFields();32 //遍历所有相应头字段

    33 for(String key:map.keySet())34 {35 System.out.println(key+"---->"+map.get(key));36 }37 try(38 //定义BufferedReader输入流来读取URL响应

    39 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")))40 {41 String line;42 while((line=in.readLine())!=null)43 {44 result+="\n"+line;45 }46 }47 }48 catch(Exception e)49 {50 System.out.println("发送GET请求出现异常!"+e);51 e.printStackTrace();52 }53 returnresult;54 }55 /**

    56 *想指定URL发送POST请求57 *@paramurl 发送请求的URL58 *@paramparam 请求参数,格式满足key=value&key2=value2的形式59 *@returnURL 代表远程资源的响应60 */

    61 public staticString sendPost(String url,String param)62 {63 String result="";64 try

    65 {66 URL realUrl=newURL(url);67 //打开和URL之间的连接

    68 URLConnection conn=realUrl.openConnection();69 //设置通用的请求属性

    70 conn.setRequestProperty("accept","*/*");71 conn.setRequestProperty("connection","Keep-Alive");72 conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2906.0 Safari/537.36");73 conn.setDoOutput(true);74 conn.setDoInput(true);75 try(76 //获取URLConnection对象对应的输出流

    77 PrintWriter out =newPrintWriter(conn.getOutputStream()) )78 {79 //发送请求参数

    80 out.print(param);81 //flush输出流的缓冲

    82 out.flush();83 }84 try(85 //定义BufferedReader输入流来读取URL响应

    86 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")))87 {88 String line;89 while((line=in.readLine())!=null)90 {91 result+="\n"+line;92 }93 }94 }95 catch(Exception e)96 {97 System.out.println("发送POST请求出现异常!"+e);98 e.printStackTrace();99 }100 returnresult;101 }102 public static voidmain(String[] args)103 {104 //String s =GetPostTest.sendGet("https://www.jd.com",null);105 //System.out.println(s);

    106 String s1=GetPostTest.sendPost("http://my.just.edu.cn/","user=1245532105&pwd=095493");107 String s2 =GetPostTest.sendGet("http://my.just.edu.cn/index.portal",null);108 System.out.println(s1);109 }110 }

    View Code

    (二)基于TCP协议的网络编程(使用Socket进行通信)

    TCP协议一般是和IP协议一起使用的,TCP/IP协议属于一种可靠的网络协议,它可以在通信的两端各建立一个Socket,使得两端形成一个虚拟的网络链路。于是两端的程序就可以通过这个虚拟链路进行通信。

    通过安装IP协议,可以保证计算机之间发送和接受数据,但是无法解决数据分组在传输过程中的问题。所以需要TCP协议来提供可靠并且无差错的通信服务。

    通过java的封装好的Socket可以实现一个简单的聊天程序。这个程序由服务端程序和客户端程序组成,为了实现用户聊天需要在服务端除了Server用于接受客户端请求并建立对应的Socket,还得通过一个ServerThread来为每个客户端建立一个线程用于监听客户端的消息,并向客户端发送消息。而在客户端除了一个Client程序用于建立和服务器端的Socket并且将用户输入的数据发送给服务器端,还需要一个ClientThread用来建立一个线程用于监听服务器端发来的数据并显示出来。

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 importjava.io.PrintStream;2 importjava.io.IOException;3 importjava.net.ServerSocket;4 importjava.net.Socket;5 importjava.util.List;6 importjava.util.Collections;7 importjava.util.ArrayList;8 importjava.lang.Thread;9 classMyServer10 {11 public static final int SERVER_PORT=30000;12 //利用MyMap保存每个客户端名字和对应的输出流

    13 public static MyMap clients = new MyMap();14 public voidinit()15 {16 try

    17 (18 //建立监听的ServerSocket

    19 ServerSocket ss = newServerSocket(SERVER_PORT))20 {21 //采用死循环一直接受客户端的请求

    22 while(true)23 {24 Socket s=ss.accept();25 newMyServerThread(s).start();26 }27 }28 catch(IOException ex)29 {30 System.out.println("服务器启动失败,请检查端口:"+SERVER_PORT+"是否已经被占用?");31 }32 }33 public static voidmain(String[] args)34 {35 MyServer server=newMyServer();36 server.init();37 }38 }

    Server

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 importjava.net.Socket;2 importjava.io.BufferedReader;3 importjava.io.IOException;4 importjava.io.InputStreamReader;5 importjava.io.PrintStream;6 public class MyServerThread extendsThread7 {8 //定义当前线程所处理的Socket

    9 private Socket s=null;10 //该Socket对应的输入流

    11 BufferedReader br=null;12 //该Socket对应的输出流

    13 PrintStream ps=null;14 public MyServerThread(Socket s) throwsIOException15 {16 this.s=s;17 }18 public voidrun()19 {20 try

    21 {22 //获取该Socket对应得输入流

    23 br=new BufferedReader(newInputStreamReader(s.getInputStream()));24 //获取该Socket对应的输出流

    25 ps=newPrintStream(s.getOutputStream());26 String line = null;27 //采用循环不断地从Socket中读取客户端发来的数据

    28 while( (line=br.readLine())!=null)29 {30 //如果读取到MyProtrocol.USER_ROUND开始,并以其结束则可以确定读到的是用户的登录名

    31 if(line.startsWith(MyProtocol.USER_ROUND)&&line.endsWith(MyProtocol.USER_ROUND))32 {33 //得到真实消息

    34 String userName=getRealMsg(line);35 //如果用户名重复

    36 if(MyServer.clients.map.containsKey(userName))37 {38 System.out.println("用户名重复");39 ps.println(MyProtocol.NAME_REP);40 }41 else

    42 {43 System.out.println(userName+"登陆成功");44 ps.println(MyProtocol.LOGIN_SUCCESS);45 MyServer.clients.put(userName,ps);46 }47 }48 //如果读到以MyProtocol.PRIVATE_ROUND开始,并以其结束,则可以确定是私聊信息,私聊信息只向制定输出流发送

    49 else if(line.startsWith(MyProtocol.PRIVATE_ROUND)&&line.endsWith(MyProtocol.PRIVATE_ROUND))50 {51 //得到真实消息

    52 String userAndMsg =getRealMsg(line);53 //以SPLIT_SIGN分割,前半部分是私聊用户名,后一部分是内容54 //System.out.println(userAndMsg);55 //System.out.println(MyProtocol.SPLIT_SIGN);

    56 String user = userAndMsg.split(MyProtocol.SPLIT_SIGN)[0];57 String msg = userAndMsg.split(MyProtocol.SPLIT_SIGN)[1];58 //获取私聊用户对应的输出流,并发送私聊信息

    59 MyServer.clients.map.get(user).println(MyServer.clients.getKeyByValue(ps)+"悄悄对你说:"+msg);60 }61 //公聊,对所有Socket发

    62 else

    63 {64 //获取真实消息

    65 String msg=getRealMsg(line);66 //遍历clients中的每个输出流

    67 for(PrintStream clientPs:MyServer.clients.valueSet())68 {69 clientPs.println(MyServer.clients.getKeyByValue(ps)+"说:"+msg);70 }71 }72 }73 }74 //捕获到异常,表明该Socket有问题,将该程序对应的输出流从Map中删除

    75 catch(IOException ex)76 {77 MyServer.clients.removeByValue(ps);78 System.out.println(MyServer.clients.map.size());79 //关闭网络和IO资源

    80 try

    81 {82 if(br!=null) br.close();83 if(ps!=null) ps.close();84 if(s!=null) s.close();85 }86 catch(IOException e)87 {88 e.printStackTrace();89 }90 }91 }92 //将读到的内容去掉前后的协议,恢复成真实数据

    93 privateString getRealMsg(String line)94 {95 return line.substring(MyProtocol.PROTOCOL_LEN,line.length()-MyProtocol.PROTOCOL_LEN);96 }97 }

    ServerThread

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 importjava.io.PrintStream;2 importjava.io.IOException;3 importjava.net.UnknownHostException;4 importjava.io.InputStreamReader;5 importjava.io.BufferedReader;6 importjava.net.ServerSocket;7 importjava.net.Socket;8 importjava.net.InetAddress;9 importjavax.swing.JOptionPane;10 classMyClient11 {12 private static final int SERVER_PORT=30000;13 privateSocket socket;14 privatePrintStream ps;15 privateBufferedReader brServer;16 privateBufferedReader keyIn;17 public voidinit()18 {19 try

    20 {21 //初始化代表键盘的输入流

    22 keyIn = new BufferedReader(newInputStreamReader(System.in));23 //链接到服务器

    24 socket = new Socket("127.0.0.1",SERVER_PORT);25 //获取该Socket对应的输入流和输出流

    26 ps = newPrintStream(socket.getOutputStream());27 brServer=new BufferedReader(newInputStreamReader(socket.getInputStream()));28 String tip="";29 //采用循环不断弹出对话框要求输入用户名

    30 while(true)31 {32 String userName=JOptionPane.showInputDialog(tip+"输入用户名");33 //用户输入用户名后前后加上协议字符串后发送

    34 ps.println(MyProtocol.USER_ROUND+userName+MyProtocol.USER_ROUND);35 //读取服务器的响应

    36 String result =brServer.readLine();37 //如果用户名重复则开始下次循环

    38 if(result.equals(MyProtocol.NAME_REP))39 {40 tip="用户名重复,请重试!";41 continue;42 }43 //如果服务器返回登陆成功,则循环结束

    44 if(result.equals(MyProtocol.LOGIN_SUCCESS))45 {46 break;47 }48 }49 }50 //补货到异常,关闭网络资源,并推出程序

    51 catch(UnknownHostException ex)52 {53 System.out.println("找不到远程服务器,请确定服务器已经启动!");54 closeRs();55 System.exit(1);56 }57 catch(IOException ex)58 {59 System.out.println("网络异常!请重新登陆");60 closeRs();61 System.exit(1);62 }63 //以该socket对应的输入流启动Client线程

    64 newMyClientThread(brServer).start();65 }66 //定义一个读取键盘输出,并向网络发送的方法

    67 private voidreadAndSend()68 {69 try

    70 {71 //不断地读取键盘的输入

    72 String line=null;73 while((line=keyIn.readLine())!=null)74 {75 //如果发送的信息中有冒号,并且以//开头,则认为发送私聊信息

    76 if(line.indexOf(":")>0&&line.startsWith("//"))77 {78 line=line.substring(2);79 //System.out.println(MyProtocol.PRIVATE_ROUND+line.split(":")[0]+MyProtocol.SPLIT_SIGN+line.split(":")[1]+MyProtocol.PRIVATE_ROUND);

    80 ps.println(MyProtocol.PRIVATE_ROUND+line.split(":")[0]+MyProtocol.SPLIT_SIGN+line.split(":")[1]+MyProtocol.PRIVATE_ROUND);81 }82 else

    83 {84 ps.println(MyProtocol.MSG_ROUND+line+MyProtocol.MSG_ROUND);85 }86 }87 }88 //捕获到异常,关闭网络资源,并退出程序

    89 catch(IOException ex)90 {91 System.out.println("网络异常!请重新登陆");92 closeRs();93 System.exit(1);94 }95 }96 //关闭Socket、输入流、输出流的方法

    97 private voidcloseRs()98 {99 try

    100 {101 if(keyIn!=null) ps.close();102 if(brServer!=null) brServer.close();103 if(ps!=null) ps.close();104 if(socket!=null) keyIn.close();105 }106 catch(IOException ex)107 {108 ex.printStackTrace();109 }110 }111 public static voidmain(String[] args)112 {113 MyClient client=newMyClient();114 client.init();115 client.readAndSend();116 }117 }

    Client

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 importjava.io.PrintStream;2 importjava.io.IOException;3 importjava.io.InputStreamReader;4 importjava.io.BufferedReader;5 importjava.net.ServerSocket;6 importjava.net.Socket;7 importjava.net.InetAddress;8 importjava.lang.Thread;9 class MyClientThread extendsThread10 {11 //该客户端线程负责处理输入流

    12 BufferedReader br=null;13 publicMyClientThread(BufferedReader br)14 {15 this.br=br;16 }17 public voidrun()18 {19 try

    20 {21 String line=null;22 //不断的读取Socket输入流的内容,并将其打印输出

    23 while((line=br.readLine())!=null)24 {25 System.out.println(line);26 }27 }28 catch(Exception e)29 {30 e.printStackTrace();31 }32 finally

    33 {34 try

    35 {36 if(br!=null) br.close();37 }38 catch(IOException ex)39 {40 ex.printStackTrace();41 }42 }43 }44 }

    ClientThread

    JDK1.4开始,Java提供了NIO API用于开发高性能的网络服务器,借助NIO可以不必为每个客户端都建立一个线程。下面我将利用NIO改变这个聊天程序。

    第二部分:分布式文件协同编辑器

    第一部分 Java网络编程知识

    附件:《实验指导报告书》

    分布式文件协同编辑器

    实验指导书--1

    一、实验目的

    加深对分布式系统基本概念的理解,灵活运用多种分布式互斥与同步访问的算法;掌握网络编程的基本方法,熟悉Socket套接字的使用,实现网络间的通信程序;设计并初步实现一个“分布式文件协同编辑器”原型系统。

    二、实验要求

    1、有N个网络用户编辑同一磁盘上的多个文件,文件的存取服务由文件服务器完成,网络上的用户通过客户端软件完成协同编辑工作。编辑器架构如图1所示:

    f4e92f3654224c313fddea32736c6ead.png

    2、设计并实现分布式互斥与同步访问,实现多用户协同编辑。

    3、设计并初步实现一个“分布式文件协同编辑器”。

    4、可以在Window或Linux下完成。

    三、实验内容

    实验内容由两部分组成:

    第一部分:编写文件服务器程序,详细要求有:

    实现对磁盘文件的存取服务。

    实现与客户端软件的文件传输服务(客户端指定文件名称,通过Socket实现)

    不能使用集中控制策略。

    第二部分:编写客户端软件,具体要求如下:

    实现对文件简单的编辑/浏览功能(只要能查看/改变文件内容即可);

    实现与文件服务器的文件传输功能(客户端指定文件名称,通过Socket实现);

    实现多个客户端软件之间的通讯功能,能实现协同工作的功能;

    实现分布式的互斥编辑功能。

    四、实验方法

    1、实验有两个方案(同学们也可自己设计新的方案):

    方案一:获取并发用户列表的方法:客户端软件在访问文件时,先在子网内广播信息,访问该文件的其它客户端软件应答。

    方案二:分布式互斥访问可以使用令牌环算法。

    2、实现分布式互斥编辑功能(同学们也可自己设计新的方案):

    1)        多个客户可以同时浏览文件内容(已经提交的版本)。

    2)        当文件加互斥锁时,多个客户也可以同时浏览文件内容(旧版本),但是只能由加互斥锁的用户编辑文件(未提交的版本),而且提交之后,必须通知其他浏览该文件的用户,以便其它用户获得最新版本的内容。

    3)        进入编辑状态之前,首先要获得互斥锁。而且在任意时刻,只能一个用户对文件进行编辑。

    展开全文
  • 我想删除java中的空文件夹,这里是我的代码:try (DirectoryStream stream = Files.newDirectoryStream(path)) {for (Path file : stream) {if (file.toFile().isFile()) {System.out.println("Path is File");...
  • 我想找出使用Java创建文件的时间,因为我希望删除某个时间段之前的文件,目前我正在删除目录中的所有文件,但这并不理想:public void DeleteFiles() {File file = new File("D:/Documents/NetBeansProjects/...
  • javaIO中,文件的查询和删除文件的复制程序如下:普通的复制是:public classAcopy {public voidcopy(String oldpath,String newpath )throwsIOException {File of =newFile(oldpath);File nf =newFile(newpath)...
  • it's a little more reliable & consistent than the legacy java.io.Fileclasses: Path fp = file.toPath(); Files.delete(fp); If you want to catch the possible exceptions: try { Files.delete(path); } ...
  • import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;impor...
  • 我创建了一些临时使用的文件,并将它们用作某些方法的...(单线程)虽然实际上由于java覆盖不是问题,但总是只有一个文件.我想了解它为什么会发生,如果我可以使用的话Thread.sleep(sometime);编辑:-File x = new file("...
  • 我正在Java的SO的帮助下从事此项目的工作,正在读取一个文件夹,然后将其内容写入文件。然后,我需要浏览该内容,仅保留末尾带有Thumbnail.jpg的图像。编辑:public static final File outFile = new File(System....
  • OA公文流转系统主要用于处理企业...根据文档在OA系统及其它办公系统的中的流转方式,PageOffice组件提供了文档流转的各个环节对应的文件打开模式及相关实用功能,以便于更好地实现OA系统的需求。下面我们详细论述P...
  • PS:合并个pdf成一个//先删除之前的all.pdf String filePath="all.pdf"; File file=new File(filePath); file.delete(); //要合并的所有pdf的路径 List fileList; //all.pdf保存路径 String savepath="all.pdf"; ...
  • 编辑:工作正常。我强烈建议您对其进行配置并查看。我敢打赌,与文件I/O和你的比较操作相比,构造函数调用没有任何意义。public class FileStack {private File file;private long position = 0;private String ...
  • 获得文本名称实现尾部追加功能实现覆盖式添加数据删除数据获取光标位置在特定光标位置处添加数据查找特定字符串在主串中第一次出现的位置统计文本文件内出现的数字,汉字,英文字母,特殊字符的个数,及总的字符个数...
  • java编程技术递归删除目录下的所有文件及子目录下所有文件删除空目录的方法。下面列出几个方法分享给大家:方法一:递归删除目录下的所有文件及子目录下所有文件/*** 递归删除目录下的所有文件及子目录下所有文件*...
  • 当用户选择这些文件之一并单击“删除”时,我们需要从blobstore中删除文件.这是我们的代码,但根本不删除文件:public void remove(String fileURL){BlobstoreService blobstoreService = BlobstoreServiceFactor...
  • 时代在发展,科技在进步,我们现在日常使用的文件也发展了,...那么,如何使用PDF编辑删除PDF空白页面呢,是不是有很的小伙伴不知道该怎么操作呢,不要担心,就跟小编一起来看看下面的文章吧。 1.打开运行迅捷...
  • 我目前正在使用弹簧网络项目.... .settings如何删除这些不需要的文件.我不知道这些在我的项目中是如何呈现的.我的同事们也遇到过这个问题.任何建议都会有所帮助.解决方法:作为它的git存储库,您可以在.git...
  • 我有点搞砸了我的Java安装,现在我得到这样的:删除Java安装(Linux)的$ sudo apt-get remove jre1.8.0_66(Reading database ... 55212 files and directories currently installed.)Removing jre1.8.0-65 ...find:...
  • 文档中没有说明新行字符(前导和尾随)也将被删除 . 简而言之 String text = readFileAsString("textfile.txt").trim(); 也适合你 . (用Java 6检查) 2 years ago String text = readFileAsString("textfile....
  • 先举几个可以删除文件删除不掉文件的例子(先在F盘创建test1.txt文件,然后可以直接拷贝代码到IDE执行),最后总结下原因:例子一:下面的例子毫无疑问是能够删除文件的importjava.io.File;importjava.io....
  • 我正在使用iText生成PDF文件 . 我想禁止编辑PDF,但允许读者提取页面 . 这是我设置加密的代码:writer.setEncryption(null, null, 0xffffffff, PdfWriter.STANDARD_ENCRYPTION_128);第三个参数指定权限 . 我正在使用...
  • IDEA 删除java类的3种提示

    千次阅读 2021-03-15 17:30:05
    1. 点击 delete 删除文件时,会弹出如下选项:Safe delete (with usage search)Search in comments and strings“Safedelete(withusagesearch)”,字面意思是使用搜索安全删除. 是否选中结果分别为:没有选中状态,直接...
  • import java.io.File;import java.util.Scanner;/** 删除文件夹及子文件夹所有文件*/public class Test10 {public static void main(String[] args) {//用户输入路径Scanner scanner = new Scanner(...
  • 软件介绍Java编辑器安卓版下载:编译器软件中有关于Java语言的,就是这个Java编辑器手机软件了,这个软件可以用于对Java代码的编写,支持很Java所需的功能,可以做到让你随时随地的去编写Java程序,接下来就让...
  • Java文档自动生成

    2021-02-12 13:03:35
    java-api-doc解决的痛点通常的文档生成工具,都需要开发人员编写注解或注释,代码入侵太强,而且费事,我希望工具自动解析代码,然后根据代码生成文档,如果有注释就自动扫描注释,没有就以代码为准,生成的文档如果...
  • IDM UEStudio是一个强大、快速、安全的文本编辑器,其有用的特性使任何用户类型和编程语言的日常生活更容易。UEStudio 提供了 UltraEdit 的全部文本编辑功能,并且包括了更强大的开发特性,能帮助您提升庞大项目开发...
  • 因为UTF-8文件中的BOM而破坏工具是我经验中很常见的事情。我不知道为什么那里有如此的downvote(但是这让我有机会尝试获得足够的投票赢得一个特殊的SO徽章);更重要的是:UTF-8 BOM通常没有什么意义,但它完全有效...
  • 假设您删除了7M元素列表的第一个元素 - 那么您也必须移动6,999,999个元素。如果您在循环中执行此操作,则需要O(n^2)时间,其中n是列表的大小。对于7M元素列表,这将是非常缓慢的。相反,如果您知道要提前删除哪些...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,394
精华内容 80,157
关键字:

多文件列表编辑删除java

java 订阅