1.首先在本地存放一个文件;

2.接着打开IDEA开始网络编程,分别创建两个类,客户端类和服务器类;
3.接着在客户端类中创建一个本地文件输入流,读取本地文件;同时创建Socket对象,并使用网络字节输出流向服务器发起传输文件的请求;
4.然后在服务器类中创建ServerSocket对象,并使用对象的getInputStream()方法读取从客户端传来的文件;同时创建本地文件输出流,用于写出并将文件存放到服务器的指定位置;
5.服务器端接收并存储文件成功后,服务器类需要向客户端反馈相关信息,因此继续使用Socket类的getOutputStream()方法反馈文件“上传成功”的信息;客户端类使用getInputStream()方法读取服务器反馈的信息,完成一次通信;
6.最后,先启动服务器类,在启动客户端类,查看文件是否上传成功。
如果通过servelet来读取上传文件路径,则代码如下,我已经在项目中用过了:
DiskFileItemFactory difif = new DiskFileItemFactory(); difif.setSizeThreshold(32*1024);difif.setRepository(new File(tmpDir)); // 用以上工厂实例化上传组件ServletFileUpload sfu = new ServletFileUpload(difif); sfu.setSizeMax(MAX_SIZE); List fileList = sfu.parseRequest(request); if ( fileList == null || fileList.size() == 0) { throw new Exception(" 导入文件不存在,请检 查");} else { File upLoadFile = null; Iterator fileIterator = fileList.iterator(); //得到所有上传的文 件 while (fileIterator.hasNext()) { FileItem fileItem = (FileItem)fileIterator.next(); // 取得上传文件 名 if (fileItem.getContentType() == null) { } else { // 此为路 径 String path = fileItem.getName(); String t_ext = path.substring(path.lastIndexOf(".") + 1); // 根据系统时间生成上传后保存的文件 名 String prefix = String.valueOf(System.currentTimeMillis()); // 保存最终的文件完整路径,保存在工程根目录下的Upload目录 下 String u_name = tmpDir + File.separator + prefix + "." + t_ext; // 开始保存文 件 upLoadFile = new File(u_name); fileItem.write(upLoadFile); } } }