【问题标题】:how do i use java classes in web context?我如何在 web 上下文中使用 java 类?
【发布时间】:2011-12-28 22:49:42
【问题描述】:

我有一个文本文件和一个读取文本文件并将每一行存储在String [] 中的类(Reader)。

String name;
String [] lines;

Reader(String name){
    this.name = name;
}

public String toString(){
    return this.name;
}

public readFile(String filename){
    String line = "";
    int i = 0;
    try{
        BufferedReader reader = new BufferedReader(new FileReader(filename));

        while(line = reader.readLine()) != null){
            lines[i] = line;
            i++;
        }// while
        reader.close();
    }
    catch(etc...){}
}

我希望在我的 jsp 页面上打印 table 中的每个数组元素。

Reader r = new Reader("test");
out.print(r.toString());

工作并打印“测试”但是...

r.readFile("test.txt")
for (int i=0; i < r.lines.length; i++)
    out.print(r.lines[i])

不...但是,如果我在命令行上运行它,它会打印 [ ] 行

如何在网络环境中执行此操作?

【问题讨论】:

  • 你试过调试吗??记录您从 r.readFile(...) 获得的内容...您的网络服务器是否有可用/可访问的文件?
  • 删除了其他问题(或无论如何投票)@Nadir 我是 jsp 的新手...我的 jsp 文件在根文件夹中,并且在 /WEB-INF/ 中有 Reader 和 test.txt classes/test/ 阅读器在测试包中
  • 可能问题在于,由于您已将其移至 Web 上下文,因此未找到输入文件。首先尝试确保找到该文件。
  • 更新帖子,打开文件进行阅读的代码,以及输入文件的确切位置,Reader 所属的包。

标签: java jsp tomcat


【解决方案1】:

尝试替换以下内容:

BufferedReader reader = new BufferedReader(new FileReader(filename));

BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(filename)));

这应该可以工作,因为输入文件与Reader 在同一个包中。

更新:

我认为问题出在TeamData

readFile("skytest\\data.file")

这不是文件的有效路径。既不在文件系统中,也不在类路径中。 由于 data.file 在类路径中,您可以使用getResourceAsStream 来加载它。 而且,由于 skytest 是根目录(包),"/skytest/data.file" 在这里也有效(前导的/ 表示相对包根)。或者,由于文件与TeamData 位于同一个包中,因此只需文件名"data.file" 就足够了。

所以,使用以下内容:

readFile("data.file") 

并更改以下内容:

BufferedReader reader = new BufferedReader(new FileReader(requiredFile));

BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(requiredFile)));

此外,以下做法确实是一种不好的做法(称为吞下异常):

catch (IOException ioe) {
    //do something about the exception here
    return false;
}

【讨论】:

  • 这里有什么:catch(etc...){}?我只是想看看是否有任何异常被吞下。
  • 我刚刚注意到在没有声明包的情况下编译类有不同的行为。这和它有什么关系吗?
  • 只是catch(IOException e){System.err.print(e);}
  • 您在控制台上没有看到任何异常?
  • 不...这实际上是我的问题的摘要...是否可以将我的代码发送给您,也许您可​​以看到?
【解决方案2】:

试试这样的:

    BufferedReader reader = null;
    try
    {
        reader = new BufferedReader(new FileReader(new File("path/to/filename.txt")));
        String nextLine = reader.readLine();
        while (nextLine != null)
        {
            System.out.println(nextLine); // do stuff with the line you read in.
            nextLine = reader.readLine();
        }
        reader.close();
    }
    catch (FileNotFoundException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2018-12-02
    • 2011-06-14
    相关资源
    最近更新 更多