为了实现
远程文件管理系统的跨 *** 作系统运行,设计了一套基于 Java Socket 的远程文件类应用程序接口(API),并在此基础上实现了一个图形界面的 Client/Server结构的远程文件管理系统。这套API在形式上类似于SunJDK本地文件类,开发人员使用这套 API 能方便快速地实现能满足自身需要的远程文件管理系统。关键词:Java; socket; JDK; 文件管理系统中图法分类号: 文献标识码: 文章编号:Design and realization of Java based remote file management system JIANGYing ,XIU Gui_hua (Shenyang Institute of Chemical Tecnology , Shenyang 110142, China) Abstract:A set of Java socket based application programming interface API) about the remote file system is designed to realize the(remote file management system's running on different operating systems, and a client/server structure based remote file managementsystem is realized with graphic interface using that set of API. This set of API is similar to the local file operation classes of the Sun JDK.Using this set of API the programmers can realize a remote file management system satisfying their requirement conveniently and rapidly. Key words:JavasocketJDKfile management system 1 引 言 现有的远程文件管理系统主要有以下两种类型:①基于 FTP 协议的系统;②各 *** 作系统自带的,只能在相同 *** 作系统之间进行远程文件管理的系统。 对于第 1 种系统,有安装、管理复杂等缺点,并且同一种服务器端或
客户端软件只能在同一种 *** 作系统上安装使用;而第 2 种系统只能在相同的 *** 作系统中使用。 Java 语言是一种优秀的跨平台语言,用 Java 语言编写的程序编译之后产生的 class 文件能在不同的 *** 作系统上运行。因此,设计了一套在形式上类似于 Java 本地文件类的远程文件管理 API,并且在这套 API 的基础上实现了一个基于 C/S结 构的图形界面远程文件管理系统,这套系统的服务器端和客户端都能在不同的 *** 作系统上运行。基于这套 API,各种类型的用户都能方便快速地实现出能满足自身需要的远程文件管理系统。 2 设计原则和相关技术 2.1 设计原则 系统基于传统的 Client/Server 两层结构设计,设计原则如 下:①客户端和服务器端都采用纯 Java语言编写,以保证系统的跨平台应用性;②客户端和服务器端用 Socket 进行底层通信;服务器端程序作为监听程序在需要管理的文件系统所在的主机中运行,监听来自客户端,也就是文件系统的管理者的管理 *** 作命令。客户端和服务器端用 Socket 保持通信。 2.2 Java Socket 概述 流式 Socket 所完成的通信是一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条专用的虚拟 连接通道,然后它们通过这条通道传送数据信息进行通信,当 通 信 结 束 时 再 将 原 先 所 建 立 的 连 接 拆 除 。 Java 语 言 用 Java.Net.Socket 和Java.Net.ServerSocket 类来实现 Socket 通信。下面的代码片断表示了一个建立服务器端监听程序并与客户端进行简单通信的过程: ……//在 8000 端口新建一个监听服务ServerSocket listener = new ServerSocket(8000)//阻塞,直至捕捉到一个 client 端的请求Socket client = listener.accept()//得到向客户端的输出流OutputStream out = client.getOutputStream()//得到来源于客户端的输入流InputStream in = client.getInputStream()String strHello =“Hello!”byte[] hello = strHello.getBytes()//向客户端发送消息“Hello!”out.write(hello)……由上面的程序可见,监听程序在捕捉到客户端的连接请求后能得到向客户端的输出流(OutputStream 类)和来源于客户端的输入流(InputStream 类),调用输出流和输入流的相关方法,就能向客户端发送字节或者从客户端接收字节,这样就为远程文件管理系统提供了技术支持。 2.3 Java 文件类概述 Java 语言的文件 *** 作功能十分强大,有丰富的类库来支 持文件 *** 作,主要有 File 类、FileInputStream 类、FileOutputStream 类、FileSystemView 类、RandomAccessFile 类等。其中, File 类用来管理磁盘文件和目录,FileInputStream 和 FileOutputStream 类分别管理文件的输入和输出,FileSystemView 类主要 实现 *** 作系统级别的文件 *** 作 。这些类使用方便,功能强大,但是只能执行本地文件 *** 作。下面的代码显示了用 File 类和 FileSystemView 类判断一个驱动器是否为软盘驱动器的方法: ……FileSystemView fs= FileSystemView.getFileSystemView() File drive = new File“A:\\”) if(fs.isFloppyDrive(drive)) System.out.println(“A 盘是软盘驱动器。”) else System.out.println(“A 盘不是软盘驱动器。”) ……3 系统的设计 系统由 3 个部分组成:相关的一套 API,供客户端程序使用;服务器端程序;客户端程序。 3.1 相关 API 这套 API 的核心类是 FileSystem 类和 File 类,而 File 类的 实现又依赖于FileSystem类。(1)rg.rmfs.FileSystem 此类对应 Sun JDK 中的 javax.swing.filechooser.FileSystemView 类,并且是它的子类;FileSystem 类表示一个远程的文件 系统,用在客户端程序中,通过它提供的静态方法getFileSystem()可以得到 FileSystem 类的对象: public class FileSystem extends FileSystemView { private Socket socket //与远程文件系统的 Socket 连接 private OutputStream out //输出到远程文件系统的输出流private InputStream in //来源于远程文件系统的输入流 public static synchronized FileSystem getFileSystem(String host,int port){ …… //用指定的主机和端口号来取得与远程文件系统的连接 socket = new Socket(host,port) out = socket.getOutputStream() in = socket.getInputStream() …… } //从一个文件输入流中读入字节 int read(FileInputStream fis,in,byte[] b,int off,int len) { …… String cmd =“READ”+fis.getID()+“END” out.write(cmd.getBytes[]) in.read(b,off,len)…… } //向文件输出流输出字节 void write(FileOutputStream fos,byte[] b,int off,int len){ … String cmd =“WRITE”+fos.getID()+“END” out.write(cmd.getBytes[])out.write(b,off,len) { … { …… (2) org.rmfs.File 此类对应 Sun JDK 中的 Java.io. File 类,用在客户端程序 中,表示远程文件系统中的一个文件或者目录: public class File implements java.io.Serializable,java.lang.Comparable{ private FileSystem fs //表示此文件所在的远程文件系统 private String path//表示此文件在文件系统中的路径 //得到此文件所在的文件系统public FileSystem getFileSystem() {return fs} //构造方法 public File(FileSystem fs,String path){ if path == null || fs==null) {…… throw new NullPointerException() { …… {.…… (3) org.rmfs. FileInputStream此类对应 Sun JDK 中的 java.io.FileInputStream 类,用来从一个远程文件中读取数据 public class FileInputStream extends java.io.InputStream { private FileSystem fs //对应的文件所在的远程文件系统对象private File file//对应的远程文件对象//构造方法public FileInputStream(File file){ this.file = file this.fs = file.getFileSystem() {…… {…… (4)Java.io.FileOutputStream 此类对应 Sun JDK 中的 Java.io.FileOutputStream 类,用来向一个远程文件写数据 public class FileOutputStream extends java.io.OutputStream{…//与 FileInputStream类似略 //构造方法 public FileOutputStream(File file){ this.file = filethis.fs = file.getFileSystem() …… { //向输出流中写数据 public void write(byte[] b, int off, int len) throws IOExc-eption{ … fs.write(this,b,off,len) { …… {…… (5)org.rmfs. RandomAccessFile 此类对应 SunJDK 中的 java.io.RamdomAccessFile 类,功能也与之相似。由于前面介绍的 4 个类已经能实现远程文件管理系统的功能,故不再详细介绍此类。3.2 服务器端程序服务器端程序向客户机提供远程文件访问服务,它实质上是一个在某个端口上进行监听的程序。FileSystem 类有一个域 socket,实际上就是与服务器端程序相连的 Socket 对象。服务器端程序直接与 FileSystem 类进行通信和传递数据。当服务器端程序捕捉到一个连接请求时,就代表有一个客户端程序正在连接服务器,这时,服务器端程序就生成一个线程来处理和客户端的通信。3.3 客户端程序 客户端程序使用上面介绍的 5 个类与远程文件系统进行通信,一个典型的 *** 作流程是:调用 FileSystem getFileSystem(Stringhost, int port) 方法得到远程文件系统的对象;调用File(FileSystem fs,String path)方法得到一个远程文件对象;然后就可以根据得到的文件对象执行相关 *** 作,如可以删除文件、可以向文件写数据(需要构造 FileOutputStream 类)、可以从文件中读取数据(需要构造 FileInputStream 类)等。客户端程序使用上面介绍的 5 个类,就可以完全屏蔽具体的 Socket *** 作来进行网络通信,大大降低了程序的复杂度,提高了程序的开发效率。4 结 论设计了一套在形式上类似于 Sun 公司的标准本地文件处理类的 API,并在这套 API 的基础上实现了一个 Client/Server 结构的远程文件管理系统。由于这套 API 在形式上与 Sun 公司的文件处理类有相似的接口,并且完全屏蔽了底层的 Socket *** 作,所以用户用这套 API能方便、快速地实现符合自身要求的远程文件管理系统。本文作者创新点:设计了类似于 Sun 公司的标准本地文件处理类的 API,并在这套 API 的基础上实现了一个 Client/Server 结构的远程文件管理系统,使用户能方便、快速地实现符合自身要求的远程文件管理系统。不要使用DW的远程管理服务器功能
应该使用leapFTP,CuteFTP等专业的FTP软件将修改后的文件上传
干网站活的时候要养成良好的备份习惯
每次上传文件前,要注意保存一次备份,多次备份分别存进不同的压缩包
评论列表(0条)