JSP 上传文件
主要问题:可以获取到上传文件的内容但是网页出现NullPointer报错理想效果应该是打印出“文件上传成功"
次要问题:文件上传获取的sava.txt文件中文是乱码的
文件相关代码下面已给出
上传页面
网页报错
书上的实例
jsp文件
```html
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>uploadtitle>
head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
br>
<input type="submit" value="开始上传">
form>
body>
html>
servlet文件
package com.jqe.file.servlet;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberInputStream;
import java.io.LineNumberReader;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UploadServlet extends HttpServlet{
private PrintWriter out;
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp)
{
try{
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(req.getInputStream()));
File file=new File("e://save.txt");
if(!file.exists()){
file.createNewFile();
}
File fileTemp=new File("e://temp.txt");
if(!fileTemp.exists()){
fileTemp.createNewFile();
}
BufferedWriter bufferedWriter= new BufferedWriter(new FileWriter(fileTemp));
String str=null;
int maxNumLine=0;
while((str=bufferedReader.readLine())!=null){
maxNumLine++;
bufferedWriter.write(str);
bufferedWriter.newLine();
bufferedWriter.flush();
}
bufferedWriter.close();
bufferedReader.close();
BufferedReader bufferedReader1=new BufferedReader(new FileReader(new File("e://temp.txt")));
BufferedWriter bufferedWriter1=new BufferedWriter(new FileWriter(file));
String str1=null;
int num=0;
while((str1=bufferedReader1.readLine())!=null){
num++;
if(num>4&&num"文件提交成功");
}catch(UnsupportedEncodingException e){
//TODO Auto-generated catch block
e.printStackTrace();
out.println("其他错误");
}catch(IOException e){
//TODO Auto-generated catch block
out.println("文件提交失败");
e.printStackTrace();
}
}
}
web.xml
```html
<servlet>
<servlet-name>uploadservlet-name>
<servlet-class>com.jqe.file.servlet.UploadServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>uploadservlet-name>
<url-pattern>/uploadurl-pattern>
servlet-mapping>
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在你的UploadServlet中,out变量没有被初始化,所以在out.println("文件提交成功")处会抛出NullPointerException异常。你需要将out初始化为resp.getWriter(),如下所示:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
out = resp.getWriter(); // 初始化out
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(req.getInputStream()));
// ...
至于文件内容出现乱码的问题,可能是因为你在读写文件时没有指定正确的字符编码。在读取文件时,你可以指定文件编码为UTF-8,如下所示:
BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(new FileInputStream("e://temp.txt"), "UTF-8"));
在写文件时,你可以使用BufferedWriter的构造函数指定文件编码为UTF-8,如下所示:
BufferedWriter bufferedWriter1 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
请注意,为了正确地处理文件编码,你需要确保上传的文件本身采用UTF-8编码。