首先你客户端要跟服务器交互是要客户端主动发送请求
然后建立连接去 *** 作
就算你不手动选保存路径,那你还是要写代码去实现这个过程的
实现方式就两种了
bs跟cs架构均可
思路是一样的
BS:
servlet读取本地文件,然后以流的形式输出就行,注意要设置输出的MINE类型也就是contentType
你客户端写个程序通过http访问这个servlet,然后通过程序去保存到你移动硬盘
如果是cs架构的话,你的服务端监听socket
如果有客户端连接那就等待接收命令或者是直接往客户端传文件的二进制流
客户端:已启动就连接服务端,发送文件请求,处理回传的文件字节流
这种通常是如下做法:1:提供查询页面,让用户输入查询条件
2:根据查询条件到数据库去检索,并获取到对应的记录
3:生成csv到本地(可以省略,生成临时文件到tomcat的临时目录)
4:用读取文件,用response写流到客户端
解释:csv文件实际上就是字符串,之间用“,”进行分割,之后进行的存储。工具类如下:
import java.io.BufferedWriter
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.OutputStreamWriter
import java.util.List
/**
*
* CSV文件导出工具类
*/
public class CSVUtils {
/**
* CSV文件生成方法
* @param head
* @param dataList
* @param outPutPath
* @param filename
* @return
*/
public static File createCSVFile(List<Object>head, List<List<Object>>dataList,
String outPutPath, String filename) {
File csvFile = null
BufferedWriter csvWtriter = null
try {
csvFile = new File(outPutPath + File.separator + filename + ".csv")
File parent = csvFile.getParentFile()
if (parent != null &&!parent.exists()) {
parent.mkdirs()
}
csvFile.createNewFile()
// GB2312使正确读取分隔符","
csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
csvFile), "GB2312"), 1024)
// 写入文件头部
writeRow(head, csvWtriter)
// 写入文件内容
for (List<Object>row : dataList) {
writeRow(row, csvWtriter)
}
csvWtriter.flush()
} catch (Exception e) {
e.printStackTrace()
} finally {
try {
csvWtriter.close()
} catch (IOException e) {
e.printStackTrace()
}
}
return csvFile
}
/**
* 写一行数据方法
* @param row
* @param csvWriter
* @throws IOException
*/
private static void writeRow(List<Object>row, BufferedWriter csvWriter) throws IOException {
// 写入文件头部
for (Object data : row) {
StringBuffer sb = new StringBuffer()
String rowStr = sb.append("\"").append(data).append("\",").toString()
csvWriter.write(rowStr)
}
csvWriter.newLine()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)