// 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_"))
答案 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转义序列。它们用于表示非图形字符以及双引号,单引号和反斜杠等字符。如果您想在字符串文字中表示双引号,可以使用\"来表示。如果您想在字符文字中表示单引号,可以使用\'。
答案 2 :(得分:2)