Java - Method"中的SecurityException; printDuplicates"

时间:2015-12-15 04:33:53

标签: java securityexception

我是Java的新手,试图提交一个有效的项目,在这个例子中printDuplicates。说明如下:

  

编写一个名为printDuplicates的方法,该方法接受包含一系列行的输入文件的Scanner作为其参数。您的方法应检查每一行,查找同一行上连续出现的同一令牌,并按连续出现的次数打印每个重复的令牌。不打印非重复的标记。在这个问题中不考虑重复多行(例如,如果一行以给定的标记结束而下一行以相同的标记开头)。

     

例如,如果输入文件包含以下文本:

     

你好,你怎么样对你   我是杰克杰克斯傻笑的傻笑,傻笑的傻笑      弓哇哇yippee yippee yo yippee yippee yay yay yay   一条鱼两条鱼红色鱼蓝色鱼   它是布偶秀,wakka wakka wakka   您的方法将为前面的输入文件生成以下输出:

     

如何* 2你* 4   我* 3杰克的* 2傻笑* 5   哇* 2 yippee * 2 yippee * 2 yay * 3

     

瓦卡* 3   您的代码仅打印重复的令牌;仅显示连续一次的那些未显示。您的代码应在每个报告的重复令牌之间放置一个空格,并应尊重原始文件中的换行符。这就是预期输出中出现空白行的原因,对应于不包含任何连续重复标记的文件的第四行。您可以假设文件的每一行至少包含一个输入标记。

这是我的代码,非常适合提交。

import java.io.*;
import java.util.*;
Scanner input;
public static void printDuplicates(Scanner input) throws Exception {
    String word = "";
    String word2 = "";
    input = new Scanner(new File("idontknowwhattodo.txt"));
    while(input.hasNextLine()) {
        Scanner line = new Scanner(input.nextLine());
        int repeat = 1;
        word = line.next();
        while(line.hasNext()) {
word2 = line.next();
while(word.equals(word2)) {
    repeat++;
    if(line.hasNext()){
        word2 = line.next();
    } else {
        break;
    }
}
if(repeat!=1) {
    System.out.print(word + "*" + repeat + " ");
}
repeat = 1;
word = word2;
}
        System.out.println();
    }
}

但是,每当我尝试提交项目时,它都会抛出此错误:

(no output was produced!)
SecurityException on line 5:
You are not allowed to read the file       /usr/share/tomcat7/temp/idontknowwhattodo.txt

java.lang.SecurityException: You are not allowed to read the file   /usr/share/tomcat7/temp/idontknowwhattodo.txt
at java.io.FileInputStream.<init>(FileInputStream.java:135)
at java.io.FileReader.<init>(FileReader.java:72)
at Scanner.<init>(Scanner.java:330)
at printDuplicates (Line 5)

这是什么意思?我有多个工作项目,但由于这一个错误,我似乎无法提交它们。有哪些专家可以帮我解决这个问题吗?谢谢。

4 个答案:

答案 0 :(得分:1)

看起来你正在使用你的路径中的Tomcat。 Tomcat需要特殊的安全权限才能读取或写入文件。这是防止恶意代码访问操作系统上的敏感文件的基本保护。您可以配置这些目录或坚持读取和写入默认目录:

https://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html

答案 1 :(得分:1)

由于声誉点无法添加评论,因此请使用“答案”部分。

同意上述评论,它与权限有关。

  1. 在/usr/share/tomcat7/temp/idontknowwhattodo.txt上执行ls -ltr
  2. 检查运行java应用程序的用户(比如myuser)是否具有/usr/share/tomcat7/temp/idontknowwhattodo.txt所需的权限。
  3. 以下两个选项:
  4. 给用户&#34; myuser&#34;使用chmod对idontknowwhattodo.txt的必要权限。
  5. 或将idontknowwhattodo.txt复制到&#34; myuser&#34;拥有权限。

答案 2 :(得分:0)

根据说明,您已经将Scanner对象(引用输入文件)作为方法的参数。所以,你不应该重新初始化它。 该行应删除:

 input = new Scanner(new File("idontknowwhattodo.txt"));

答案 3 :(得分:0)

问题描述表示您正在将Scanner对象作为参数。您不必重新创建它,您可能会尝试将您的项目提交给某些在线竞赛。服务器上的程序将加载您的类并使用Scanner对象作为参数调用方法printDuplicates(),您不必担心它是如何创建的。只要使用它,一切都会好的。

只需注释扫描仪分配行,如下所示

String word = "";
String word2 = "";
/*input = new Scanner(new File("idontknowwhattodo.txt"));*/
 while(input.hasNextLine()) {
 ...