Java 文件夹传输的实现 关于Java实现文件夹的网络传输,我在网上搜索到可以用遍历,解压缩和Xml解析,但是都没有给出具体的实现方式,有谁曾经做过类似的东西吗?可以的话拿出来供大家学习一下吧! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有做过相关方面的研究,是不是用zip流来实现的呢。期待高手? for循环 if 是文件夹 就递归 else 传输 我这有一个文件上传的例子,你可以参考一下。有结果要给我加分!!!package test;import javax.servlet.http.HttpServletRequest;import javax.servlet.ServletInputStream;import java.util.Dictionary;import java.util.Hashtable;import java.io.*;public class FileUpload { // 定义变量,用来存储上传文件的名字,路径等 private String savePath, filepath, filename, contentType; // 保存了用户在表单中输入数据的名字/值对 private Dictionary fields; // 获得文件名字 public String getFilename() { return filename; } // 获得上传文件的路径 public String getFilepath() { return filepath; } // 设定上传文件的路径,如果没有设定就保存在服务器默认目录 public void setSavePath(String savePath) { this.savePath = savePath; } // 得到文件类型 public String getContentType() { return contentType; } public String getFieldValue(String fieldName) { if (fields == null || fieldName == null) return null; return (String) fields.get(fieldName); } private void setFilename(String s) { if (s == null) return; int pos = s.indexOf("filename=\""); if (pos != -1) { filepath = s.substring(pos + 10, s.length() - 1); pos = filepath.lastIndexOf("\\"); if (pos != -1) filename = filepath.substring(pos + 1); else filename = filepath; } } private void setContentType(String s) { if (s == null) return; int pos = s.indexOf(": "); if (pos != -1) contentType = s.substring(pos + 2, s.length()); } public void doUpload(HttpServletRequest request) throws IOException { ServletInputStream in = request.getInputStream(); byte[] line = new byte[128]; int i = in.readLine(line, 0, 128); if (i < 3) return; int boundaryLength = i - 2; String boundary = new String(line, 0, boundaryLength); //-2丢弃换行字符 fields = new Hashtable(); while (i != -1) { String newLine = new String(line, 0, i); if (newLine .startsWith("Content-Disposition: form-data; name=\"")) { if (newLine.indexOf("filename=\"") != -1) { setFilename(new String(line, 0, i - 2)); if (filename == null) return; //文件内容 i = in.readLine(line, 0, 128); setContentType(new String(line, 0, i - 2)); i = in.readLine(line, 0, 128); //空行 i = in.readLine(line, 0, 128); newLine = new String(line, 0, i); PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( (savePath == null ? "" : savePath) + filename))); while (i != -1 && !newLine.startsWith(boundary)) { // 文件内容的最后一行包含换行字符 // 因此我们必须检查当前行是否是最 // 后一行 i = in.readLine(line, 0, 128); if ((i == boundaryLength + 2 || i == boundaryLength + 4) && (new String(line, 0, i).startsWith(boundary))) pw.print( newLine.substring(0, newLine.length() - 2)); else pw.print(newLine); newLine = new String(line, 0, i); } pw.close(); } else { // 普通表单输入元素 // 获取输入元素名字 int pos = newLine.indexOf("name=\""); String fieldName = newLine.substring(pos + 6, newLine.length() - 3); i = in.readLine(line, 0, 128); i = in.readLine(line, 0, 128); newLine = new String(line, 0, i); StringBuffer fieldValue = new StringBuffer(128); while (i != -1 && !newLine.startsWith(boundary)) { // 最后一行包含换行字符 // 因此我们必须检查当前行是否是最后一行 i = in.readLine(line, 0, 128); if ((i == boundaryLength + 2 || i == boundaryLength + 4) && (new String(line, 0, i).startsWith(boundary))) fieldValue.append( newLine.substring(0, newLine.length() - 2)); else fieldValue.append(newLine); newLine = new String(line, 0, i); } fields.put(fieldName, fieldValue.toString()); } } i = in.readLine(line, 0, 128); } }} Java连接Oracle的问题(和SQLservr的比较) 请教一个时间格式问题!!! 关于输入的问题 老问题,新提法 (java字符串的截取,中英混合,并有其它各种字符,全角半角等.....) 在网上看了很多,都没有一个完善的解决办法 关于substring! 在做上传文件的时候,因为文件大而发生错误。请问在tomcat或web.xml的什么地方可以配置限制大小。 在线等,解答完就送分,谢谢~ 大家好,能否给小弟推荐几本JBulider 的书 高手请帮看一下这个编译错误: 关于Timer的终止 JTextPane想实现QQ空间日志发表文本框的功能 一道经典JAVA面试题
if 是文件夹 就递归
else 传输
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletInputStream;
import java.util.Dictionary;
import java.util.Hashtable;
import java.io.*;public class FileUpload {
// 定义变量,用来存储上传文件的名字,路径等
private String savePath, filepath, filename, contentType;
// 保存了用户在表单中输入数据的名字/值对
private Dictionary fields; // 获得文件名字
public String getFilename() {
return filename;
}
// 获得上传文件的路径
public String getFilepath() {
return filepath;
}
// 设定上传文件的路径,如果没有设定就保存在服务器默认目录
public void setSavePath(String savePath) {
this.savePath = savePath;
}
// 得到文件类型
public String getContentType() {
return contentType;
} public String getFieldValue(String fieldName) {
if (fields == null || fieldName == null)
return null;
return (String) fields.get(fieldName);
} private void setFilename(String s) {
if (s == null)
return;
int pos = s.indexOf("filename=\"");
if (pos != -1) {
filepath = s.substring(pos + 10, s.length() - 1);
pos = filepath.lastIndexOf("\\");
if (pos != -1)
filename = filepath.substring(pos + 1);
else
filename = filepath;
}
} private void setContentType(String s) {
if (s == null)
return;
int pos = s.indexOf(": ");
if (pos != -1)
contentType = s.substring(pos + 2, s.length());
} public void doUpload(HttpServletRequest request) throws IOException {
ServletInputStream in = request.getInputStream();
byte[] line = new byte[128];
int i = in.readLine(line, 0, 128);
if (i < 3)
return;
int boundaryLength = i - 2;
String boundary = new String(line, 0, boundaryLength); //-2丢弃换行字符
fields = new Hashtable(); while (i != -1) {
String newLine = new String(line, 0, i);
if (newLine
.startsWith("Content-Disposition: form-data; name=\"")) {
if (newLine.indexOf("filename=\"") != -1) {
setFilename(new String(line, 0, i - 2));
if (filename == null)
return; //文件内容
i = in.readLine(line, 0, 128);
setContentType(new String(line, 0, i - 2));
i = in.readLine(line, 0, 128); //空行
i = in.readLine(line, 0, 128);
newLine = new String(line, 0, i);
PrintWriter pw =
new PrintWriter(
new BufferedWriter(
new FileWriter(
(savePath == null ? "" : savePath)
+ filename)));
while (i != -1 && !newLine.startsWith(boundary)) {
// 文件内容的最后一行包含换行字符 // 因此我们必须检查当前行是否是最 // 后一行
i = in.readLine(line, 0, 128);
if ((i == boundaryLength + 2
|| i == boundaryLength + 4)
&& (new String(line, 0, i).startsWith(boundary)))
pw.print(
newLine.substring(0, newLine.length() - 2));
else
pw.print(newLine);
newLine = new String(line, 0, i);
}
pw.close();
} else {
// 普通表单输入元素
// 获取输入元素名字
int pos = newLine.indexOf("name=\"");
String fieldName =
newLine.substring(pos + 6, newLine.length() - 3);
i = in.readLine(line, 0, 128);
i = in.readLine(line, 0, 128);
newLine = new String(line, 0, i);
StringBuffer fieldValue = new StringBuffer(128);
while (i != -1 && !newLine.startsWith(boundary)) {
// 最后一行包含换行字符
// 因此我们必须检查当前行是否是最后一行
i = in.readLine(line, 0, 128);
if ((i == boundaryLength + 2
|| i == boundaryLength + 4)
&& (new String(line, 0, i).startsWith(boundary)))
fieldValue.append(
newLine.substring(0, newLine.length() - 2));
else
fieldValue.append(newLine);
newLine = new String(line, 0, i);
}
fields.put(fieldName, fieldValue.toString());
}
}
i = in.readLine(line, 0, 128);
}
}
}