JAVA文件流读写乱码问题

ftlovexg 2008-10-21 03:15:00
我现在正做一个c/s模式的JAVA程序,里面有个上传下载的问题。

当我选择一个.txt文件上传,都没有问题。
当我选择一个非.txt文件上传时,传到服务器上的结果,就是文件在,例如WORD文档,怎么都打不开。即使打开了,也是乱码。


try {
// 将文件转化为文件输入流
FileInputStream input = new FileInputStream("c:\\abc.doc");
int total = 0;
// 将byte[]类型转化,放入StringBuffer中.
while ((total = input.read(bt)) != -1) {
for (int i = 0; i < total; i++) {
sb.append((char) bt[i]);
}
}
// 关闭文件输入流
input.close();
addDoc(sb.toString(),"abc.doc");

} catch (IOException e) {

}


/**
* 测试接受文件
* @param docStr
* @param name
* @return
*/
private Boolean addDoc(String docStr,String name) {

File dirFile;

// 判断是否存在文件夹
boolean bFile = false;

// 返回值
boolean rtnValue = false;
try {

dirFile = new File("e:\\" + "2");
bFile = dirFile.exists();

if (bFile != true) {
bFile = dirFile.mkdir();
System.out.println("Create successfully!");
}

OutputStream out = new FileOutputStream("e:\\" + "2" + "\\"
+ name);
DataOutputStream dos = new DataOutputStream(out);
dos.write(docStr.getBytes());

out.close();
dos.close();

rtnValue = true;
} catch (IOException e) {
rtnValue = false;
}
return rtnValue;

}


代码大概就这样,我就想上传下载任何格式的文件。~~~请各位大虾帮忙~~
...全文
2571 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
期待可为 2011-03-25
  • 打赏
  • 举报
回复
我也遇到了这样的问题,正在纠结中,查资料,解决后大家交流下
chenggongxiong 2009-06-01
  • 打赏
  • 举报
回复
FileInputStream 用于读取诸如图像数据之类的原始字节流。
FileOutputStream 用于写入诸如图像数据之类的原始字节的流。
读文件:
import java.io.*;
public class PrintWriterTest{
public static void main(String args[]){
PrintWriter pw=null;
try{
pw=new PrintWriter(
new OutputStreamWriter(
new FileOutputStream("bufferedwriter.txt")));
pw.println("hello world");
}catch(Exception e){
e.printStackTrace();
}finally{
if(pw!=null)
try{
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
写文件:
import java.io.*;
public class BufferedReaderTest{
public static void main(String args[]){
BufferedReader br=null;
try{
br=new BufferedReader(
new InputStreamReader(
new FileInputStream("bufferedwriter.txt")));
//br.ready():
//判断此流是否准备好读取,如果可以读取,那么返回true,如果不能,则返回false
while(br.ready()){
System.out.println(br.readLine());
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(br!=null)
try{
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
ftlovexg 2008-10-21
  • 打赏
  • 举报
回复
lihan6415151528,我这个是C/S的。好像有点不对哟~~~~

ftlovexg 2008-10-21
  • 打赏
  • 举报
回复
lihan6415151528,我这个是C/S的。好像有点不对哟~~~~

ftlovexg 2008-10-21
  • 打赏
  • 举报
回复
lihan6415151528,我这个是C/S的。好像有点不对哟~~~~

lihan6415151528 2008-10-21
  • 打赏
  • 举报
回复
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>WebModule1</display-name>
<servlet>
<servlet-name>multiparttestservlet</servlet-name>
<servlet-class>image.MultipartTestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>multiparttestservlet</servlet-name>
<url-pattern>/multiparttestservlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>diskfileupload</servlet-name>
<servlet-class>image.DiskFileUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>diskfileupload</servlet-name>
<url-pattern>/diskfileupload</url-pattern>
</servlet-mapping>
</web-app>
要注意的是,你必需先在c盘下建立temp和tmp文件夹,否则运行时会抛出例外
lihan6415151528 2008-10-21
  • 打赏
  • 举报
回复
MultipartTestServlet.java:
package image;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;

public class MultipartTestServlet extends HttpServlet {

public MultipartTestServlet() {
super();
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setCharacterEncoding("gbk");
RequestContext requestContext = new ServletRequestContext(request);
if(FileUpload.isMultipartContent(requestContext)){
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File("c:/tmp/"));
ServletFileUpload upload = new ServletFileUpload(factory);
//upload.setHeaderEncoding("gbk");
upload.setSizeMax(2000000);
List items = new ArrayList();
try {
items = upload.parseRequest(request);
} catch (FileUploadException e1) {
System.out.println("文件上传发生错误" + e1.getMessage());
}

Iterator it = items.iterator();
while(it.hasNext()){
FileItem fileItem = (FileItem) it.next();
if(fileItem.isFormField()){
System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk"));
}else{
System.out.println(fileItem.getFieldName() + " " +
fileItem.getName() + " " +
fileItem.isInMemory() + " " +
fileItem.getContentType() + " " +
fileItem.getSize());

if(fileItem.getName()!=null && fileItem.getSize()!=0){
File fullFile = new File(fileItem.getName());
File newFile = new File("c:/temp/" + fullFile.getName());
try {
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
}else{
System.out.println("文件没有选择 或 文件内容为空");
}
}

}
}
}

}
lihan6415151528 2008-10-21
  • 打赏
  • 举报
回复
DiskFileUpload:
package image;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.beanutils.*;
public class DiskFileUpload
extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";

//Initialize global variables
public void init() throws ServletException {

}

//Process the HTTP Get request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType(CONTENT_TYPE);
try{
System.out.println("start----------------------");
org.apache.commons.fileupload.DiskFileUpload fu=new org.apache.commons.fileupload.DiskFileUpload();
fu.setSizeMax(1000000);
fu.setSizeThreshold(1096);
fu.setRepositoryPath("c:\\");
if(request!=null)
{
List fileItems=fu.parseRequest(request);
System.out.println("to here-----------------");
Iterator i = fileItems.iterator();
Hashtable ht = new Hashtable();
InputStream in = null;
int size = 0;
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (fi.isFormField()) {
ht.put(fi.getFieldName(), fi.getString());
System.out.println("" + fi.getFieldName() + ":" + fi.getString());
}
else {
in = fi.getInputStream();
size = (int) fi.getSize();
if (in != null && size > 0) {
ht.put("filetype", fi.getContentType());
System.out.println("filetype:" + fi.getContentType());
ht.put("filename", fi.getName());
System.out.println("filename:" + fi.getName());
}
}
}
}
}catch(Exception e){
e.printStackTrace(System.err);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doPost(request,response);
}
//Clean up resources
public void destroy() {
}
}
ftlovexg 2008-10-21
  • 打赏
  • 举报
回复
自己顶下
ftlovexg 2008-10-21
  • 打赏
  • 举报
回复
补充一下,如果有例子,给我一个最好了~~~~
natato 2008-10-21
  • 打赏
  • 举报
回复
我有这问题,顶一下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧