Java中的串联字符串生成介于null之间

时间:2014-03-04 00:53:25

标签: java string concatenation string-concatenation

此问题与Concatenating null strings in Java

非常相似

但我的问题有所不同。

我想建立一个文件的绝对路径:

String path = properties.get("path"); // returns /home/myuser/relativepath/ , ends with bar /
String file = currentFile; // currentFile values "file.txt"
String result = path + file; // this results in /home/myuser/relativepath/nullfile.txt

为什么有'null'文字?这就是我的申请现在不起作用的原因。

我在Windows和Linux中对它进行了审核。 在Windows中,它完美运行。 在Linux中,我有这个问题。

我上传了属性文件,然后用vi命令编辑。 这可能是问题吗? 我不应该用这种方式生成绝对路径,并在Java中使用File.Separator属性吗?

编辑:我已经通过详细步骤发布了我的最终答案。我希望它会有用。

4 个答案:

答案 0 :(得分:1)

我的赌注(虽然我没有看到Java这样做)是你的属性文件中有某种类型的null-ish字符(例如回车),Windows在操作系统级别处理,因此Java / Properties不会看到了。

作为第一遍,请尝试打印path字符串的长度和最后几个字符,例如:

for(int i = Math.max(0, path.length()-5); i < path.length(); i++) {
  System.out.print(path.charAt(i)+":"+((int)path.charAt(i))+" ");
}
System.out.println(path.length());

愿意在Linux上赌最后一个角色,这不是你所期望的。然后,正确的修复就是清理属性文件,使其在两个操作系统上都兼容。

答案 1 :(得分:1)

嗯,解决我的问题的完整而详细的步骤是这些(也许任何一个都没有必要,但我更愿意全部写出来):

  1. 使用vi,emacs,...在Linux中创建配置文件(不是从Windows上传文件)。
  2. 使用vi,emacs编辑文件...在每个路径的末尾,不要包含目录分隔符(/)。
  3. 在变量前检查变量。确保它们没有任何空间和其他意想不到的特征。
  4. 将变量与:

    连接起来

    String result = path + File.separator + file;

  5. 我希望这会有用。谢谢大家的建议。 此致

答案 2 :(得分:0)

你期待什么?
你正在做String result = path + result; int a = 1 + a类似......不要使用变量来初始化 (如果你得到这个输出,那首先不能成为你的代码。)

答案 3 :(得分:0)

resultpath+file

    String path = properties.get("path");
    String file = currentFile; 
    String result = path + file; 
                            ^ 
                       change here

结果是:/home/myuser/relativepath/file.txt