Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gdx.files.internal(…)包装器工作不正常_Java_File_Libgdx_Bufferedreader - Fatal编程技术网

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();