1
            // Dividend Limit check or increase the Dividend
        if (dival == 10) {
            writer.println("Divident has reached it Limit !");
            i++;
            // update the file name
            String upath = "channel_" + i;
            System.out.println(path);
            // find channel_1 and replace with the updated path
            if (path.contains("channel_1")) {
                path = "D:/File Compression/Data/low_freq/low_freq/house_1/"
                        + upath + ".dat";
            } else {
                JOptionPane.showMessageDialog(null, "Invalid File Choosen");
                System.exit(0);
            }

            dival = 10;

        } else {
            dival = dival + 10;
            writer.println("Dividen:" + dival);
        }

这些行采用递归方法。第一次给出正确的路径:

D:/File Compression/Data/low_freq/low_freq/house_1/channel_2.dat

但在第二次调用时,它会将正斜杠翻转为反斜杠:

D:\File Compression\Data\low_freq\low_freq\house_1\channel_1.dat

如果我不使用该条件,它可以正常工作。

if(path.contains("channel_"))
4

3 回答 3

5

那是因为File.seperator在 Windows 中是\. 每次您让路径字符串通过时,java.io.File它都会替换它们。所以要解决这个问题,要么不要使用 File 作为辅助工具,要么用正斜杠替换反斜杠。

因此,发生的情况是您的pathString 使用了反斜杠。您检索该字符串形式 ajava.io.File将在 Windows 上自动使用反斜杠。如果路径包含“channel_1”,则使用带有正斜杠的硬编码字符串覆盖整个字符串。

于 2013-07-16T10:10:17.937 回答
2

除了前面的答案。您不应在应用程序中使用/或硬编码。\因为这会损害你的应用程序的可移植性。而是使用,

File.separator

File#separator为您提供分隔符,具体取决于您的系统。

于 2013-07-16T10:22:34.110 回答
2

\在 java 中被称为Escape 序列,用于各种目的。

在你的情况下使用File.separator

String path = "D:"+File.separator+"File Compression"+File.separator+"Data"+File.separator+"low_freq"+File.separator+"low_freq"+File.separator+"house_1"+File.separator;

使用双斜杠\\!这是一种特殊的逃生模式。像 \n 或 \r。
转义序列通常用于 Windows 中的文本文件,特别是在记事本中。

下面列出了主要的 Java 转义序列。它们用于表示非图形字符以及双引号、单引号和反斜杠等字符。如果您想在字符串文字中表示双引号,可以使用 \"。如果您想在字符文字中表示单引号,可以使用 \'。

在此处输入图像描述

于 2013-07-16T10:20:14.090 回答