Java Gdx.files.internal(…)包装器工作不正常
我制作了一个包装器Java Gdx.files.internal(…)包装器工作不正常,java,file,libgdx,bufferedreader,Java,File,Libgdx,Bufferedreader,我制作了一个包装器ConfigurationFile类来帮助处理Gdx.files之类的东西,它工作了很长一段时间,但现在不工作了,我不知道为什么 我有以下两种方法中的两种:internal(…)和local(…)。两者之间的唯一区别是处理来自(文件文件夹,字符串名称)和(字符串路径)的参数的加载 -剪掉不必要的信息- 更新 在进行了更多的配置之后,我发现它们的行为并不相同。我有一个assets/files/文件夹,Gdx.files.internal(…)可以正常访问,但是Configura
ConfigurationFile
类来帮助处理Gdx.files
之类的东西,它工作了很长一段时间,但现在不工作了,我不知道为什么
我有以下两种方法中的两种:internal(…)
和local(…)
。两者之间的唯一区别是处理来自(文件文件夹,字符串名称)
和(字符串路径)
的参数的加载
-剪掉不必要的信息-
更新
在进行了更多的配置之后,我发现它们的行为并不相同。我有一个
assets/files/
文件夹,Gdx.files.internal(…)
可以正常访问,但是ConfigurationFile.internal(…)
可以访问文件/
,它们的设置方式相同。我会给你两段我用来测试的代码
直接使用Gdx.files.internal(…)
(按预期工作):
使用ConfigurationFile.internal(…)
:
//第一部分,调用ConfigurationFile#internal(字符串路径)
ConfigurationFile config=ConfigurationFile.internal(“文件/病毒数据”);
//配置文件#内部(字符串路径)
公共静态配置文件内部(字符串路径){
ConfigurationFile config=新的ConfigurationFile();
//这实际上是调用Gdx.files.internal(“文件/病毒数据”);
config.handle=Gdx.files.internal(路径);
config.file=config.handle.file();
config.folder=config.file.getParentFile();
config.init();
返回配置;
}
//配置文件#init()
受保护的void init(){
//找不到文件。
//创建一个新文件夹作为“资产”的同级
//创建名为“病毒数据”的新文件
如果(!folder.exists())folder.mkdirs();
如果(!file.exists()){
试一试{
createNewFile();
}捕获(IOE异常){
e、 printStackTrace();
}
}else加载文件();
}
//配置文件#加载文件()
受保护的void加载文件(){
BufferedReader reader=null;
试一试{
reader=新的BufferedReader(handle.reader());
字符串c=“”;
while((c=reader.readLine())!=null){
系统输出打印ln(c);
如果(!c.contains(“:”)继续;
字符串[]值=c.split(“:”);
字符串键=值[0];
字符串值=值[1];
如果(值.length>2){
对于(int i=2;i
我难以理解的是,这两种方式之间的区别是什么,它导致我的
ConfigurationFile
在一个文件夹中创建一个新文件,该文件夹是资产的同级文件夹。有人能告诉我为什么会这样吗?我的建议是不要使用
Gdx.files.internal(folder + "/" + name);
如果必须使用文件api,请按以下方式操作:
Gdx.files.internal(new File(folder, name).toString());
这样可以避免使用路径分隔符可能发生的奇怪事情
如果Gdx可能出于某种原因需要相对路径(可能是相对于某个Gdx内部主目录),您可以使用NIO执行以下操作
final Path gdxHome = Paths.get("path/to/gdx/home");
//...
File combined = new File(folder, name);
String relativePath = gdxHome.relativize(combined.toPath()).toString();
好的,经过严格的测试,我发现了问题,我觉得很可笑
由于文件是内部的
,这意味着不能正确地引用新文件(…)
,但是它是输入流
(如果我是正确的话),但是无论如何,在内部
文件上使用文件句柄#file()方法会导致路径的某种转换,因此,在删除了处理内部文件的文件句柄#file()
后,修复了它。这可能是一回事,但是调用(文件文件夹、字符串名称)
作为参数的内部和外部方法现在只是停留在那里。;我只是使用当前路径来注册我的文件,所以这不会有什么区别。发布更新了我的最新信息。
Gdx.files.internal(new File(folder, name).toString());
final Path gdxHome = Paths.get("path/to/gdx/home");
//...
File combined = new File(folder, name);
String relativePath = gdxHome.relativize(combined.toPath()).toString();