程序可以编译,上传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());
%>