Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java can';t使用Netbeans 7.1.2访问servlet中的文件资源_Java_Servlets_Netbeans - Fatal编程技术网

Java can';t使用Netbeans 7.1.2访问servlet中的文件资源

Java can';t使用Netbeans 7.1.2访问servlet中的文件资源,java,servlets,netbeans,Java,Servlets,Netbeans,我正在运行Netbeans 7.1.2,我正在尝试访问servlet中的一些文本文件: package com.optimizations.cutting; @WebServlet(name = "Servlet", urlPatterns = {"/Servlet"}) public class Servlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpSer

我正在运行Netbeans 7.1.2,我正在尝试访问servlet中的一些文本文件:

package com.optimizations.cutting;

@WebServlet(name = "Servlet", urlPatterns = {"/Servlet"})
public class Servlet extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    System.out.println("in servlet "+System.currentTimeMillis());

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {

        DataManager dm = new DataManager();
        SheetInfo si = dm.loadSheetInfoCSV("sheetInfo.csv");
        ArrayList<Piece> pieces = dm.loadPiecesCSV("res/pieces4.csv");
....
我还重新启动了服务器(Glassfish 3.1.2)

(也许这看起来很傻,但我还需要知道我应该将文件放在哪里以及如何放置,以便可以从客户端和服务器访问它们-我的servlet将创建一些图像(.jpg)并存储它们(在哪里?),并将文件名发送回.jsp,然后在一个颜色框中显示它们)

提前谢谢

编辑

添加了更多的错误和错误行 DataManager.java中的调用:

public SheetInfo loadSheetInfoCSV(String filename){
    ....
    br = new BufferedReader( new FileReader(filename));
    String strLine = "";            

    //read comma separated file first line
    if ((strLine = br.readLine()) != null)
    ....

异常提示您正在使用
FileInputStream
获取它的
InputStream
。当资源涉及类路径资源时(您试图将其放入的所有位置都是类路径的一部分),这不是正确的方法。您应该使用
ClassLoader\getResourceAsStream()
将类路径资源作为类路径资源,而不是使用
FileInputStream
作为本地磁盘文件系统资源

如果资源文件
foo.ext
与您尝试加载资源的类(即
DataManager
类)放在同一个包中,则您可以使用它的唯一文件名获取
InputStream
,如下所示:

InputStream input = getClass().getResourceAsStream("foo.ext");
或者当您在
静态环境中时:

InputStream input = DataManager.class.getResourceAsStream("foo.ext");
如果资源
foo.ext
放置在与您尝试加载资源的类不同的包中,例如
com.example
包,则您可以通过其类路径相对路径获得它的
InputStream
,如下所示,其中前导斜杠
/
将您带到类路径的根:

InputStream input = getClass().getResourceAsStream("/com/example/foo.ext");
同样在这里,
getClass()
可以被仲裁
Foo.class
代替,只要类由相同的
ClassLoader
加载,该类可以访问相同的包结构

另一种方法是使用从当前线程获得的上下文
ClassLoader
。它可以访问一切。您只能指定类路径相对路径,它始终相对于类路径的根(因此不应使用前导斜杠):


异常提示您正在使用
FileInputStream
获取它的
InputStream
。当资源涉及类路径资源时(您试图将其放入的所有位置都是类路径的一部分),这不是正确的方法。您应该使用
ClassLoader\getResourceAsStream()
将类路径资源作为类路径资源,而不是使用
FileInputStream
作为本地磁盘文件系统资源

如果资源文件
foo.ext
与您尝试加载资源的类(即
DataManager
类)放在同一个包中,则您可以使用它的唯一文件名获取
InputStream
,如下所示:

InputStream input = getClass().getResourceAsStream("foo.ext");
或者当您在
静态环境中时:

InputStream input = DataManager.class.getResourceAsStream("foo.ext");
如果资源
foo.ext
放置在与您尝试加载资源的类不同的包中,例如
com.example
包,则您可以通过其类路径相对路径获得它的
InputStream
,如下所示,其中前导斜杠
/
将您带到类路径的根:

InputStream input = getClass().getResourceAsStream("/com/example/foo.ext");
同样在这里,
getClass()
可以被仲裁
Foo.class
代替,只要类由相同的
ClassLoader
加载,该类可以访问相同的包结构

另一种方法是使用从当前线程获得的上下文
ClassLoader
。它可以访问一切。您只能指定类路径相对路径,它始终相对于类路径的根(因此不应使用前导斜杠):


好的..我将进行编辑以显示获取文件的确切方法(我没有直接使用FileInputStream。无论如何…我想知道的是为什么这种方法适用于一个简单的Java项目(不是web,而是桌面)。我的意思是,我在一个简单的桌面java项目中测试了DataManager类,然后将其添加到web项目中的源程序包中。我将尝试您的建议,我打赌它会起作用:)。我仍然想理解为什么第一个没有,但重要的是让它工作。好的,阅读部分工作得很好:)。我需要进入写作部分(当然现在失败了(它使用File File=new File(文件名);尝试{ImageIO.write(sheet,“png”,File);(继续..因为我不允许在5分钟后编辑评论)。但我猜它可以以同样的方式修复…为什么它在桌面应用程序上工作(而不是网络)?我该如何编写它们以供客户端浏览器查看?(反正我会开始谷歌搜索)您没有提到您需要能够写入它。这会彻底改变答案。您不应该将它放在类路径中,而是放在本地磁盘文件系统中的固定位置。然后您可以使用
FileInputStream
/
FileOutputStream
通常的方式(但使用绝对路径!!)。另请参阅。要将其提供给万维网,只需将位置作为虚拟主机添加到服务器配置,或创建一个用于流式处理它的servlet。好。因此,我将进行编辑以显示获取文件的确切方法(我没有直接使用FileInputStream。无论如何……我想知道为什么这种方法适用于简单的Java项目(不是web,而是桌面)。我的意思是,我在一个简单的桌面java项目中测试了DataManager类,然后将其添加到web项目的源程序包中。我将尝试您的建议,我打赌它会起作用:)我仍然想理解为什么第一个没有,但重要的是让它工作。好的,阅读部分工作正常