Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 涉及文件读取的JUnit测试套件在Windows 10和Fedora 23上的性能有所不同_Java_Eclipse_Junit_Windows 10_Fedora 23 - Fatal编程技术网

Java 涉及文件读取的JUnit测试套件在Windows 10和Fedora 23上的性能有所不同

Java 涉及文件读取的JUnit测试套件在Windows 10和Fedora 23上的性能有所不同,java,eclipse,junit,windows-10,fedora-23,Java,Eclipse,Junit,Windows 10,Fedora 23,假设我的整个Eclipse项目位于名为project的目录中,并且在project中,有一个常规的非空、格式良好的文件data.txt,以及一个目录src。在src中,有两个目录:code和test用于与目录名称完全相同的包 在code中,我有以下文件A.java package code; import java.util.*; import java.io.*; public class A { private static Map<Integer, String> m

假设我的整个Eclipse项目位于名为
project
的目录中,并且在
project
中,有一个常规的非空、格式良好的文件
data.txt
,以及一个目录
src
。在
src
中,有两个目录:
code
test
用于与目录名称完全相同的包

code
中,我有以下文件
A.java

package code;

import java.util.*;
import java.io.*;

public class A {
  private static Map<Integer, String> m = makeMap("data.txt");

  private static Map<Integer, String> makeMap(String file) {
    Map<Integer, String> m = new HashMap<Integer, String>();
    try {
      int i = 0;
      Scanner s = new Scanner(new File(file));
      while (s.hasNextLine()) {
        m.put(i, s.nextLine());
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      System.exit(1);
    }
    return m;
  }

  // a bunch of public static methods that use the global static variable m
}
如果我在任何机器上运行
ATest
,它将通过所有测试。如果在Windows 10机器上运行
TestSuite
,则
ATest
中的测试将失败,但如果在Fedora 23 Linux机器上运行
TestSuite
TestSuite
将通过所有测试

特别是在Windows上,程序能够成功地通过
try
块而不引发异常,但问题是
s.hasNextLine()
返回
false
,因此它从不读取文件的内容。这与Fedora相反,在Fedora中,
s.hasNextLine()
返回
true
并继续执行操作,以便能够在全局地图上执行操作。让我困惑的是,
data.txt
在两个平台上都是相同的,那么为什么一个平台的性能会不同于另一个呢

有人知道为什么会发生这种情况吗?我能做些什么使我的代码独立于平台

编辑:
data.txt
包含日文字符,因此它是用UTF-8编码的,如果这有帮助的话

您需要指定正在读取的文件的编码。如果未指定,则将使用平台默认值,该默认值并不总是UTF-8


这是使用构造函数完成的。

您需要指定正在读取的文件的编码。如果未指定,则将使用平台默认值,该默认值并不总是UTF-8


这是使用构造函数完成的。

文本文件的编码是什么?这只是一种怀疑。另一个是文件的路径。您可以同时选中这两个字符。它包含日文字符,所以是UTF-8。这会引起问题吗?另外,你能解释一下你所说的文件路径是什么意思吗?它包含在project中,所以如果您正在寻找它,它应该是project/data.txt,但我不认为这就是您要问的。正如我所说,如果您认为路径不是问题,那么您应该检查两件事,它留给您编码,@ArchimedesTrajano的答案已经为您提供了一个可能的解决方案。在windows系统中打开的文件在大多数情况下并不总是UTF-8,因此您应该在代码中解决这个问题。文本文件的编码是什么?这只是一种怀疑。另一个是文件的路径。您可以同时选中这两个字符。它包含日文字符,所以是UTF-8。这会引起问题吗?另外,你能解释一下你所说的文件路径是什么意思吗?它包含在project中,所以如果您正在寻找它,它应该是project/data.txt,但我不认为这就是您要问的。正如我所说,如果您认为路径不是问题,那么您应该检查两件事,它留给您编码,@ArchimedesTrajano的答案已经为您提供了一个可能的解决方案。在windows系统中打开的文件大多数情况下并不总是UTF-8,因此您应该在代码中解决这个问题。
package test;

import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.junit.runner.RunWith;

@RunWith(Suite.class)
@SuiteClasses({ ATest.class })

public final class TestSuite { }