2 yl123456654321 yl123456654321 于 2015.05.27 16:32 提问

求助啊!java文件路径的问题

从客户端传入一个文件路径:C:\Users\msg.log
在服务器端接受到后无法获取指定的文件(确定文件路径下文件存在)
服务器端:

BufferedReader reader = new BufferedReader(
        new InputStreamReader(socket.getInputStream()));
String str = null;
char[] temp = new char[1024];
reader.read(temp);
str = String.valueOf(temp);
DataInputStream dis = new DataInputStream(
        new FileInputStream(str));

试验过如果在这里直接给str赋值C:\Users\msg.log是可以取到文件的
也试过replaceAll(),但是使用str.replaceAll("\", "\\");会报错

5个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.05.27 16:45
已采纳

1、先确定temp接收到的值是否正确
2、str.replaceAll("\\", "\\\\");替换成\

danielinbiti
danielinbiti 回复ICTY: 如果没啥问题,帮忙顺手采纳一下
2 年多之前 回复
danielinbiti
danielinbiti 回复ICTY: 恩,socket接收结尾符是需要注意的。
2 年多之前 回复
yl123456654321
yl123456654321 ...嗯,打印出来后边有很多空格!唉 还是没经验啊!谢谢谢谢大家
2 年多之前 回复
danielinbiti
danielinbiti 回复ICTY: 加一个处理特殊字符比如(回车、换行符、制表符),这种直接直接看有时看不出来。
2 年多之前 回复
danielinbiti
danielinbiti 回复ICTY: 看一下接收时字符串后面是不是多了软回车之类的字符。
2 年多之前 回复
yl123456654321
yl123456654321 好郁闷啊!无论是转成单斜杠还是双斜杠都无法找到该文件(Invalid file path)。但是要是直接给str赋值C:\Users\msg.log却是可以找到该文件!
2 年多之前 回复
danielinbiti
danielinbiti 回复ICTY: str=str.replaceAll("4个\","8个\");注意replaceAll后需要重新赋值给str才行
2 年多之前 回复
danielinbiti
danielinbiti 回复ICTY: 关键是temp对吗?
2 年多之前 回复
yl123456654321
yl123456654321 这样却还是找不到该文件,str.replaceAll后把str重新赋值为C:\\Users\\ipmsg.log(都是双斜杠)就可以找到该文件。真心不知道怎么解决啊!
2 年多之前 回复
danielinbiti
danielinbiti 回复ICTY: 呃,被网站自动截了,前面是4个\,后面是8个\就是替换成双\
2 年多之前 回复
yl123456654321
yl123456654321 报的错是:Exception in thread "Thread-1" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
2 年多之前 回复
yl123456654321
yl123456654321 str和temp接受的值打印出来都是C:\Users\msg.log,但是str.replaceAll("\\", "\\\\");时会报错:
2 年多之前 回复
wsh1992o
wsh1992o   Rxr 2015.05.27 16:35

绝对路径就表示一个固定的路径,比如:C:\Documents and Settings\All Users\index.asp 那就表示访问电脑上这个路径上的index.asp 相对就表示基于这个目录下的文件比如: ../index.asp 就是网站目录的这个文件。 所以,最好不要用绝对路径.

yl123456654321
yl123456654321 这个文件路径是另一个聊天软件默认的log保存路径,相对固定,我也是做测试用.....
2 年多之前 回复
edouardzyc
edouardzyc   2015.05.27 16:48

你看取到的str的值是什么呗,可能是编码的问题
你用replaceAll() 想要做什么? replaceAll是正则匹配,用replace就可以了

yl123456654321
yl123456654321 我也郁闷!完全不知道为什么会这样
2 年多之前 回复
edouardzyc
edouardzyc 回复ICTY: 这就奇怪了 你说直接给str赋值C:\Users\msg.log是可以的, 但是这里str获取的值和你直接赋的值是一样的,为什么不行
2 年多之前 回复
yl123456654321
yl123456654321 str取得的值是C:\Users\msg.log,已经换成replace,但是却找不到该文件
2 年多之前 回复
chentravelling
chentravelling   2015.05.27 17:39

str=str.replaceAll("\\", "\\\\"); 请注意第二个参数是8个\

chentravelling
chentravelling 醉了,第一个参数是"4个斜杠",第二个参数是“8个斜杠”
2 年多之前 回复
qq_16794101
qq_16794101   2015.05.27 23:21

绝对路径就表示一个固定的路径,比如:C:\Documents and Settings\All Users\index.asp 那就表示访问电脑上这个路径上的index.asp 相对就表示基于这个目录下的文件比如: ../index.asp 就是网站目录的这个文件。 所以,最好不要用绝对路径.

Csdn user default icon
上传中...
上传图片
插入图片