文件路径问题:/ - > \

时间:2013-07-16 10:09:01

标签: java string file path

            // 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_"))

3 个答案:

答案 0 :(得分:4)

这是因为Windows中的File.seperator\。每当你让你的路径字符串通过java.io.File它将替换它们。因此,要解决此问题,请不要使用File作为辅助工具,或者使用正斜杠替换反斜杠。

所以,会发生的是path字符串使用反斜杠。您从java.io.File检索该字符串,它将在Windows上自动使用反斜杠。如果路径包含“channel_1”,则使用带正斜杠的硬编码字符串覆盖整个字符串。

答案 1 :(得分:2)

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

在您的情况下使用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转义序列。它们用于表示非图形字符以及双引号,单引号和反斜杠等字符。如果您想在字符串文字中表示双引号,可以使用\"来表示。如果您想在字符文字中表示单引号,可以使用\'。

enter image description here

答案 2 :(得分:2)

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

File.separator

File#separator为您提供了系统中的分隔符。