这个问题让我抓狂。我有一个文件,我想在我的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位操作系统。
答案 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)