Java更新后,Eclipse中的FileNotFoundException

时间:2013-03-17 18:26:46

标签: java servlets file-upload

我有一个程序,客户端上传文件,文件存储在数据库中。在我的计算机上更新Java之前,我的项目工作正常。现在我得到一个FileNotFoundException。 Eclipse告诉我:

  

JAR文件C:\ Program Files \ Java \ jre7 \ lib \ rt.jar没有来源   附件。

有人遇到过这个问题吗?

我上传文件的servlet代码是标准的:

if (!ServletFileUpload.isMultipartContent(request))
    {return;}

try 
{ 
  List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
  courseID = items.get(0).getString();
  homeworkID = items.get(1).getString();
  File storeFile = new File(items.get(2).getName());
  String fileName = storeFile.getName();
  String mimeType = new MimetypesFileTypeMap().getContentType(storeFile); //for putting file into database
  putFileIntoDB(uName, courseID, homeworkID, fileName, mimeType, storeFile);
}//try
 catch (Exception ex)
 {
   request.setAttribute("msg", "There was an error: " + ex.getMessage());
   request.getRequestDispatcher("/upload.jsp").forward(request, response);
  }

在行fis = new FileInputStream(f)中创建FileInputStream时,在putFileIntoDB方法中发现错误:

void putFileIntoDB(String username, String courseID, String homeworkID, String fileName, String mime, File f) throws SQLException, IOException
{   
    FileInputStream fis = null;
    java.sql.PreparedStatement pstmt = null;
    java.sql.Connection conn = null;
    try {
            conn = ConnectionManager.getConnection();
            conn.setAutoCommit(true);

            fis = new FileInputStream(f);

            pstmt = conn.prepareStatement("insert into files(username, courseID, assignmentID, fileName, mimeType, contents) values (?, ?, ?, ?, ?, ?)");
            pstmt.setString(1, username);
            pstmt.setString(2, courseID);
            pstmt.setString(3, homeworkID);
            pstmt.setString(4, fileName);
            pstmt.setString(5, mime);
            pstmt.setAsciiStream(6, fis, (int) f.length());

            pstmt.executeUpdate();
            conn.commit();
        }
    catch (Exception e)
    {
      System.err.println("Error: " + e.getMessage());
      e.printStackTrace();
    } 
    finally
    {
      pstmt.close();
      fis.close();
      conn.close();
    }
}

还有其他人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:1)

尝试以下步骤;

步骤1 - 配置Eclilpse以使用JDK而不是JRE。

Window->Preferences->Java->Installed JREs
Click "Add", "Standard VM", "Next"
For "JRE Home" click "Directory"
Locate your JDK directory...
Ex: C:\java\jdk1.6.0_24
Click "Finish"
Next check the JDK vs the JRE that is listed.
Click "Ok"

步骤2 - 将项目配置为使用JDK,因为它是使用JRE创建的“已安装的JRE”。新项目应该没问题。

Right click the project's name.
Choose "Properties", "Java Build Path"
Click the tab "Libraries".
Click "Add Libraries", select "JRE System Library", Next
Select the bottom item: Workspace default JRE (jdk1.x.x. etc....)
(Notice that it is now a JDK and not the JRE!)
Click "Finish"
Now remove the JRE libarary so you only have the JDK library.
ex: JRE System Library [JavaSE-1.6]
Click "OK"