程序可以编译,上传txt文件时出现错误。
java.lang.NullPointerException
com.bean.JUploadFile.UploadStart(JUploadFile.java:224)
org.apache.jsp.juploadfile_jsp._jspService(juploadfile_jsp.java:62)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)224行是“int position=secondLine.lastIndexOf('\\')”我知道错误原因:调用testFile(request)方法,可以成功得到上传文件属性,但是从方法返回后进入不了“while( (n=i.read(fileByte))!=-1)”循环!
奇怪的是,不调用testFile(request)方法就可以成功上传,我调试2个星期了,找不到错误,请高手指点!!!JUploadFile.javapackage com.bean;
//import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class JUploadFile
{
private String[] testFile=new String[3]; private int canfileSize=60000;
private int fileSize=0;
private String canFileSuffix=".gif.jpg.jpeg.png.txt";
private String fileSuffix="";
private String fileName="";
//得到文件名
public String getFileName()
{
return fileName;
}
//得到文件大小
public int getFileSize()
{
return fileSize;
}
//得到文件扩展名
public String getFileSuffix()
{
return fileSuffix;
}
//设置扩展名
public void setFileSuffix(String fileSuffix)
{
this.fileSuffix=fileSuffix;
}
//设置大小
public void setFileSize(int fileSize)
{
this.fileSize=fileSize;
}
public void testFile(HttpServletRequest request)
{
String tempFileString="";
String fileName="";
int tempn=0;
int tempj=0;
byte fileByte[]=new byte[102400];
//BufferedInputStream in=new BufferedInputStream(i);
InputStream i2;
try
{
//FileInputStream i2 = new FileInputStream("f:/article_1054617713.gif");
i2=request.getInputStream();
//将上传的文件由二进直变成字符串
while((tempn=i2.read(fileByte))!=-1)
{
tempFileString = tempFileString + new String(fileByte, 0, tempn);
tempj=tempj+tempn;
}
//判断文件大小
if(tempj>canfileSize)
{
testFile[0]=null;
}
else
{
//得到大小
testFile[0]=new Integer(tempj).toString();
this.fileSize=tempj;
}
//判断上传的是否是正规文件
if ( (tempn = tempFileString.indexOf("filename=\"")) == -1)
{
//System.out.print("1");
testFile[1]=null;
return;
}
else
{
fileName = tempFileString.substring(tempn + 10);
tempn = fileName.indexOf("\"");
//取得带盘符的文件名
testFile[1] = fileName.substring(0, tempn);
this.fileName=fileName.substring(0, tempn);
}
//取得扩展名
tempn = testFile[1].toString().lastIndexOf(".");
fileName=testFile[1].substring(tempn + 1);
fileName = fileName.toLowerCase();
//判断扩展名
if((canFileSuffix.indexOf(fileName)==-1))
{
testFile[2]=null;
//return;
}
else
{
testFile[2]=fileName;
this.fileSuffix=fileName;
}
//System.out.print();
//System.out.print(this.fileSize);
//System.out.print(this.fileName);
//System.out.print(this.fileSuffix);
}
catch(IOException e)
{
System.out.print("error1");
}
}
//开始上传
public String UploadStart(HttpServletRequest request)
{
//建立临时文件f1:
File f1=new File("f:/new4.txt");
InputStream i;
//InputStream i2=null;
try
{
FileOutputStream o=new FileOutputStream(f1);
i=request.getInputStream();
testFile(request);
if (testFile[0]==null)
{
System.out.print("文件太大了!");
return "3";
}
if (testFile[1]==null)
{
System.out.print("不是一个正常文件!");
return "4";
}
if (testFile[2]==null)
{
System.out.print("文件扩展名不对!");
return "5";
}
int n;
byte fileByte[]=new byte[102400];
while( (n=i.read(fileByte))!=-1) //这是进入不了循环?
{
o.write(fileByte,0,n);
} o.close();
i.close();
RandomAccessFile random=new RandomAccessFile(f1,"r");
//读出f1的第2行,析取出上传文件的名字:
int second=1;
String secondLine=null;
while(second<=2)
{
secondLine=random.readLine();
second++;
}
//System.out.print(secondLine);
int position=secondLine.lastIndexOf('\\');
//客户上传的文件的名字是:
String fileName=secondLine.substring(position+1,secondLine.length()-1);
random.seek(0); //再定位到文件f1的开头。
//获取第4行回车符号的位置:
long forthEndPosition=0;
int forth=1;
while((n=random.readByte())!=-1&&(forth<=4))
{
if(n=='\n')
{
forthEndPosition=random.getFilePointer();
forth++;
}
}
//根据客户上传文件的名字,将该文件存入磁盘:
File f2=new File("f:/new6.txt");
RandomAccessFile random2=new RandomAccessFile(f2,"rw");
//确定出文件f1中包含客户上传的文件的内容的最后位置,即倒数第6行。
random.seek(random.length());
long endPosition=random.getFilePointer();
//out.println("倒数第6行"+endPosition);
long =endPosition;
int j=1;
while((>=0)&&(j<=6))
{
--;
random.seek();
n=random.readByte();
if(n=='\n')
{
endPosition=random.getFilePointer();
j++;
}
}
//将random流指向文件f1的第4行结束的位置:
random.seek(forthEndPosition);
long startPoint=random.getFilePointer();
//从f1读出客户上传的文件存入f2(读取从第4行结束位置和倒数第6行之间的内容)。
while(startPoint<endPosition-1)
{
n=random.readByte();
random2.write(n);
startPoint=random.getFilePointer();
}
random2.close();
random.close();
//System.out.print("hhd");
f1.delete(); //删除临时文件
}
catch(IOException ee)
{
System.out.print("error1");
}
//out.print("文件已上传");
return "1";
}
/*public static void main(String[] args)
{
JUploadFile a=new JUploadFile();
a.UploadStart();
//System.out.print("ff");
//System.out.print(a.getFileName());
//System.out.print(a.getFileSize());
//System.out.print(a.getFileSuffix());
}*/
}JUPLOAD.JSP<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.io.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<jsp:useBean id="J" class="com.bean.JUploadFile" scope="session" />
<%
out.print(J.UploadStart(request));
out.print(J.getFileName());
out.print(J.getFileSize());
out.print(J.getFileSuffix());
%>
java.lang.NullPointerException
com.bean.JUploadFile.UploadStart(JUploadFile.java:224)
org.apache.jsp.juploadfile_jsp._jspService(juploadfile_jsp.java:62)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)224行是“int position=secondLine.lastIndexOf('\\')”我知道错误原因:调用testFile(request)方法,可以成功得到上传文件属性,但是从方法返回后进入不了“while( (n=i.read(fileByte))!=-1)”循环!
奇怪的是,不调用testFile(request)方法就可以成功上传,我调试2个星期了,找不到错误,请高手指点!!!JUploadFile.javapackage com.bean;
//import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class JUploadFile
{
private String[] testFile=new String[3]; private int canfileSize=60000;
private int fileSize=0;
private String canFileSuffix=".gif.jpg.jpeg.png.txt";
private String fileSuffix="";
private String fileName="";
//得到文件名
public String getFileName()
{
return fileName;
}
//得到文件大小
public int getFileSize()
{
return fileSize;
}
//得到文件扩展名
public String getFileSuffix()
{
return fileSuffix;
}
//设置扩展名
public void setFileSuffix(String fileSuffix)
{
this.fileSuffix=fileSuffix;
}
//设置大小
public void setFileSize(int fileSize)
{
this.fileSize=fileSize;
}
public void testFile(HttpServletRequest request)
{
String tempFileString="";
String fileName="";
int tempn=0;
int tempj=0;
byte fileByte[]=new byte[102400];
//BufferedInputStream in=new BufferedInputStream(i);
InputStream i2;
try
{
//FileInputStream i2 = new FileInputStream("f:/article_1054617713.gif");
i2=request.getInputStream();
//将上传的文件由二进直变成字符串
while((tempn=i2.read(fileByte))!=-1)
{
tempFileString = tempFileString + new String(fileByte, 0, tempn);
tempj=tempj+tempn;
}
//判断文件大小
if(tempj>canfileSize)
{
testFile[0]=null;
}
else
{
//得到大小
testFile[0]=new Integer(tempj).toString();
this.fileSize=tempj;
}
//判断上传的是否是正规文件
if ( (tempn = tempFileString.indexOf("filename=\"")) == -1)
{
//System.out.print("1");
testFile[1]=null;
return;
}
else
{
fileName = tempFileString.substring(tempn + 10);
tempn = fileName.indexOf("\"");
//取得带盘符的文件名
testFile[1] = fileName.substring(0, tempn);
this.fileName=fileName.substring(0, tempn);
}
//取得扩展名
tempn = testFile[1].toString().lastIndexOf(".");
fileName=testFile[1].substring(tempn + 1);
fileName = fileName.toLowerCase();
//判断扩展名
if((canFileSuffix.indexOf(fileName)==-1))
{
testFile[2]=null;
//return;
}
else
{
testFile[2]=fileName;
this.fileSuffix=fileName;
}
//System.out.print();
//System.out.print(this.fileSize);
//System.out.print(this.fileName);
//System.out.print(this.fileSuffix);
}
catch(IOException e)
{
System.out.print("error1");
}
}
//开始上传
public String UploadStart(HttpServletRequest request)
{
//建立临时文件f1:
File f1=new File("f:/new4.txt");
InputStream i;
//InputStream i2=null;
try
{
FileOutputStream o=new FileOutputStream(f1);
i=request.getInputStream();
testFile(request);
if (testFile[0]==null)
{
System.out.print("文件太大了!");
return "3";
}
if (testFile[1]==null)
{
System.out.print("不是一个正常文件!");
return "4";
}
if (testFile[2]==null)
{
System.out.print("文件扩展名不对!");
return "5";
}
int n;
byte fileByte[]=new byte[102400];
while( (n=i.read(fileByte))!=-1) //这是进入不了循环?
{
o.write(fileByte,0,n);
} o.close();
i.close();
RandomAccessFile random=new RandomAccessFile(f1,"r");
//读出f1的第2行,析取出上传文件的名字:
int second=1;
String secondLine=null;
while(second<=2)
{
secondLine=random.readLine();
second++;
}
//System.out.print(secondLine);
int position=secondLine.lastIndexOf('\\');
//客户上传的文件的名字是:
String fileName=secondLine.substring(position+1,secondLine.length()-1);
random.seek(0); //再定位到文件f1的开头。
//获取第4行回车符号的位置:
long forthEndPosition=0;
int forth=1;
while((n=random.readByte())!=-1&&(forth<=4))
{
if(n=='\n')
{
forthEndPosition=random.getFilePointer();
forth++;
}
}
//根据客户上传文件的名字,将该文件存入磁盘:
File f2=new File("f:/new6.txt");
RandomAccessFile random2=new RandomAccessFile(f2,"rw");
//确定出文件f1中包含客户上传的文件的内容的最后位置,即倒数第6行。
random.seek(random.length());
long endPosition=random.getFilePointer();
//out.println("倒数第6行"+endPosition);
long =endPosition;
int j=1;
while((>=0)&&(j<=6))
{
--;
random.seek();
n=random.readByte();
if(n=='\n')
{
endPosition=random.getFilePointer();
j++;
}
}
//将random流指向文件f1的第4行结束的位置:
random.seek(forthEndPosition);
long startPoint=random.getFilePointer();
//从f1读出客户上传的文件存入f2(读取从第4行结束位置和倒数第6行之间的内容)。
while(startPoint<endPosition-1)
{
n=random.readByte();
random2.write(n);
startPoint=random.getFilePointer();
}
random2.close();
random.close();
//System.out.print("hhd");
f1.delete(); //删除临时文件
}
catch(IOException ee)
{
System.out.print("error1");
}
//out.print("文件已上传");
return "1";
}
/*public static void main(String[] args)
{
JUploadFile a=new JUploadFile();
a.UploadStart();
//System.out.print("ff");
//System.out.print(a.getFileName());
//System.out.print(a.getFileSize());
//System.out.print(a.getFileSuffix());
}*/
}JUPLOAD.JSP<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.io.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<jsp:useBean id="J" class="com.bean.JUploadFile" scope="session" />
<%
out.print(J.UploadStart(request));
out.print(J.getFileName());
out.print(J.getFileSize());
out.print(J.getFileSuffix());
%>
解决方案 »
- 求帮忙写个程序
- 今天面试给出的一个很简单的面试题
- eclipse 里面 如果一个类 没有main函数如何 让他生成一个.CLASS文件?
- 大家一起来探讨一下一个多线程任务的设计吧,希望高手进来指教
- 求助:怎么实现鼠标拖动改变布局管理器中的组件大小的功能
- 比较简单20分。。
- 请看这个简单的JAVA问题
- 请教: 如何用applet控制其所在的页面无法被关闭, 当用户点击applet时则可让其连接到另一页面? (注: 此用于善意之用途, 绝非恶意所用)
- 能推荐几本学java的好书吗??
- 如何将VJ的JDK旧版本更换为JDK1。3???
- ResultSet转换成String[][] 50分!!!!
- junit的问题?过来看一看吧
i=request.getInputStream();
我现在遇到的问题和这个一摸一样,请您也给我一份吧,谢谢啦!