当前位置:  技术问答>java相关

只已知一个InputStream is = getStream();请问如何知道is究竟有多少size ?

    来源: 互联网  发布时间:2015-09-03

    本文导语:  只已知一个InputStream is = getStream();请问如何知道is究竟有多少size ? | 如果是javamail中的得到附件的大小是用part.getSize(). 否则好象没有办法直接得到流的大小。 | 哦,这样...

只已知一个InputStream is = getStream();请问如何知道is究竟有多少size ?

|
如果是javamail中的得到附件的大小是用part.getSize().
否则好象没有办法直接得到流的大小。

|
哦,这样啊。

看看下面的上传文件的代码,你就知道了:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class UpLoadServlet extends HttpServlet {
private final String CONTENT_TYPE = "text/html;charset=gb2312";
private final int MACLEN = 2048 * 1024;
private final int BUFFERSIZE = 1024 * 8;
private final String tempFileName = "cxj-10.100.0.13";

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream out = response.getOutputStream();
String contentTypeStr = request.getContentType();
int contentLen = request.getContentLength();
String contentType = request.getContentType();
String boundary = getBoundary(contentType);
ServletInputStream in = request.getInputStream();
FileOutputStream fou = null;
byte[] b = new byte[BUFFERSIZE];
int result;
try {
result = in.readLine(b,0,b.length); //读取boundary
result = in.readLine(b,0,b.length); //读取Content-Disposition
String upLoadFileName = getUpLoadFileName(new String(b,0,result));
fou = new FileOutputStream(tempFileName);
result = in.readLine(b,0,b.length); //读取Content-Type;
result = in.readLine(b,0,b.length); //读取空行;
int totalRead = 0;
result = in.readLine(b,0,b.length);
while((new String(b,0,result)).trim().indexOf(boundary) == -1) {
totalRead += result;
fou.write(b,0,result);
result = in.readLine(b,0,b.length);
}
out.println(totalRead);
fou.close();
in.close();
//处理文件
dealFile(upLoadFileName,totalRead);
} catch(Exception ex) {
System.out.print(ex.toString());
}
}

public void destroy(){}

/*
 * 得到filename
 */
private String getUpLoadFileName(String line) {
int split = line.indexOf("filename=");
String tempFileName = delQuote(line.substring(split + 9,line.length()).trim());
if(tempFileName.indexOf("\") != -1) {
tempFileName = tempFileName.substring(tempFileName.lastIndexOf("\") + 1,tempFileName.length());
}
return tempFileName;
}

/*
 * 得到分隔符
 */
private String getBoundary(String line) {
return line.substring(line.indexOf("boundary=") + 9,line.length()).trim();
}

/*
 * 去除""
 */
private String delQuote(String line) {
if(line.indexOf(""") != -1) {
line = line.substring(1,(line.length() - 1));
}
return line;
}

/*
 * 处理文件,把最后的两个字节删除
 */
private void dealFile(String fileName, int totalRead) throws IOException {
File file = new File(tempFileName);
byte[] b = new byte[totalRead - 2];
RandomAccessFile rafRead = new RandomAccessFile(file,"r");
rafRead.readFully(b,0,totalRead - 2);
rafRead.close();
file.delete();
RandomAccessFile rafWrite = new RandomAccessFile(fileName,"rw");
rafWrite.write(b);
rafWrite.close();
}

}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何在一个已知的UNIX帐号下破解系统另一个已知帐号的密码??
  • linux下如何编程实现远程开机,已知mac地址
  • 已知一个进程的PID,如何得到其他信息?
  • 请问:如何根据已知数据画直线、矩形等图像,并以图像文件输出!
  • 请问已知进程的PID,通过什么函数可以得到进程的名字?
  • Solaris系统下如何获得进程名(已知进程ID)?
  • 菜菜的问一声,如何找到一个目录,目录名已知
  • 已知硬盘分区表项,如何计算该分区的第一个扇区在那?
  • 请问有没有办法方便提取某个已知进程所占用的socket号?谢谢
  • 已知一段文本,在unix怎样查找包含该文本的文件
  • 已知pid文件,实现杀死该进程的shell脚本怎么写?
  • 已知进程名,检测进程是否在运行并调用
  • 『硬盘』求获得硬盘格式和信息的办法,和已知CHS如何进行寻址,求教!
  • 在C SHELL中,如何判断在某一指定目录下是否有已知文件名存在?
  • 有没有可以从已知图片里过滤出,不规则图片的滤镜??
  • 求jsp向对方已知IP传GET方法及参数,并分析返回字符串的例子?
  • File类的getLastModify()得到的是长型整数,如何才能得到一个已知文件日期?
  • 已知一个进程的PID,但不知道这个进程是否停止,如何能知道系统中是否有相应的进程在运行。
  • 已知a=1,b=2 String string="a+b";如何将string转化为表达式,并计算结果
  • 笨问题----已知今天日期,怎样得到明天日期?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3