filesystem.getPath()返回错误的路径

时间:2013-09-12 15:28:45

标签: java resources nio

这个问题让我抓狂。我有一个文件,我想在我的src / main / resources文件夹中访问,我试图通过以下方式获取路径:

FileSystem fileSystem = FileSystems.getDefault();
Path path = fileSystem.getPath(AnalysisEngine.class.getResource("/models/10_NB_7dev_2.model").getFile());

但是,我一直收到以下错误:

非法字符<:>在索引2: / C :/ Users / ...(路径在这里)/models/10_NB_7dev_2.model

正如您所看到的,返回的路径在C:之前有'/',这会破坏一切。是什么原因以及如何解决这个问题?是否有java.io包的替代方案?

如果有帮助,我使用的是Windows 8 - 64位操作系统。

3 个答案:

答案 0 :(得分:2)

Class#getResource(String)返回的网址包含前一个/

/C:/Users/...(the path is here)/models/10_NB_7dev_2.model

That's just how URLs work.然后FileSystem尝试解析它,但是混合中有一个:字符是没有意义的,所以它抛出一个异常。换句话说,getPath()正在尝试创建路径,而不是网址。您不能在Windows(也可能是linux)路径中使用:字符,除非它直接跟随Drive名称作为路径字符串的前两个字符。

此处的解决方案不是使用类路径资源的路径。类路径资源可能不是直接来自文件系统,它可能位于jar内。

答案 1 :(得分:0)

...(路径在这里)/models/10_NB_7dev.model

你输入的代码中的

("/models/10_NB_7dev_2.model").

你是想放一个_2。?

答案 2 :(得分:0)

If you are not worried about using the default filesystem (e.g. if you aren't using an in-memory filesystem for testing) then you can do:

from pprint import pprint
from urllib2 import urlopen

from bs4 import BeautifulSoup


html = urlopen('http://www.gbgb.org.uk/resultsRace.aspx?id=1837958')
soup = BeautifulSoup(html,'lxml')

rows = []
for header in soup.find_all("div", class_="resultsBlockHeader"):
    track = header.find("div", class_="track").get_text(strip=True)
    date = header.find("div", class_="date").get_text(strip=True)
    datetime = header.find("div", class_="datetime").get_text(strip=True)
    grade = header.find("div", class_="grade").get_text(strip=True)
    distance = header.find("div", class_="distance").get_text(strip=True)
    prizes = header.find("div", class_="prizes").get_text(strip=True)



    results = header.find_next_sibling("div",       class_="resultsBlock").find_all("ul", class_="line1")
    for result in results:
        fin = result.find("li", class_="fin").get_text(strip=True)
        greyhound = result.find("li",  class_="greyhound").get_text(strip=True)
        trap = result.find("li", class_="trap").get_text(strip=True)
        sp = result.find("li", class_="sp").get_text(strip=True)
        timeSec = result.find("li",  class_="timeSec").get_text(strip=True)
            timeDistance = result.find("li", class_="timeDistance").get_text(strip=True)


        rows.append({

            "track":track,
            "date":date,
            "datetime":datetime,
            "grade":grade,
            "distance":distance,
            "prizes":prizes,
            "fin":fin,
            "greyhound":greyhound,
            "trap":trap,
            "sp":sp,
            "timeSec":timeSec,
            "timeDistance":timeDistance,

                     })
pprint(rows)