Java 混乱的文件IO

Java 混乱的文件IO,java,file,file-io,com,com4j,Java,File,File Io,Com,Com4j,我显然就是这么做的,不知道怎么做的。或者为什么。。。或者到底是什么 好的,这是设置: 我正在使用OpenDSSENGE.dll和此过程生成的com4j java接口运行OpenDSS模拟: 因为我要求OpenDSS服务器能够在不同的机器上运行,所以我用java实现了一个客户机/服务器(文本和对象传输),一切都很好 现在我希望能够运行“工作站模式”(在本地直接在应用程序中调用com)。另外,我还想穿一点。所以我编写了一个运行程序(线程,调用函数)和一个包装器(处理来自运行程序的函数调用,包括对结果

我显然就是这么做的,不知道怎么做的。或者为什么。。。或者到底是什么

好的,这是设置:

我正在使用OpenDSSENGE.dll和此过程生成的com4j java接口运行OpenDSS模拟:

因为我要求OpenDSS服务器能够在不同的机器上运行,所以我用java实现了一个客户机/服务器(文本和对象传输),一切都很好

现在我希望能够运行“工作站模式”(在本地直接在应用程序中调用com)。另外,我还想穿一点。所以我编写了一个运行程序(线程,调用函数)和一个包装器(处理来自运行程序的函数调用,包括对结果的处理)

包装器包含一个抽象类的实现,它将是客户端(套接字通信)或服务器端(工作站模式,com对象)实现

现在是问题

大规模编辑

经过更多的测试,我现在可以更好地描述确切的问题所在

启动COM接口会中断文件IO。工作目录以某种方式发生了更改。以一种糟糕的方式。调用任何java函数都会得到它应该所在的工作目录。这就是我执行java的地方

但由于某种原因,工作目录是dll存储数据的地方

我已经验证了这一点,将其中一个文件放在那里并尝试从中读取(已修改,请参见第一个字符)

代码:

结果:

Current relative path is: D:\Feustel\Aufträge\OROP\source\04 - Products\OROP
Current dir:D:\Feustel\Aufträge\OROP\source\04 - Products\OROP
Current dir using System:D:\Feustel\Aufträge\OROP\source\04 - Products\OROP

java.io.FileNotFoundException: 1Neues_Netz_EXP_CAPACITY.csv (Das System kann die angegebene Datei nicht finden)
  at java.io.FileInputStream.open(Native Method)
  at java.io.FileInputStream.<init>(Unknown Source)
  at java.io.FileInputStream.<init>(Unknown Source)
  at java.io.FileReader.<init>(Unknown Source)
  at dev_tests.WorkstationModeTest2.main(WorkstationModeTest2.java:76)

dssinit

Current relative path is: D:\Feustel\Aufträge\OROP\source\04 - Products\OROP
Current dir:D:\Feustel\Aufträge\OROP\source\04 - Products\OROP
Current dir using System:D:\Feustel\Aufträge\OROP\source\04 - Products\OROP

Failed: local creation
当前相对路径为:D:\Feustel\Aufträge\OROP\source\04-Products\OROP
当前目录:D:\Feustel\Aufträge\OROP\source\04-Products\OROP
当前目录使用系统:D:\Feustel\Aufträge\OROP\source\04-Products\OROP
java.io.FileNotFoundException:1Neues_Netz_EXP_CAPACITY.csv(数据收集系统)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(未知源)
位于java.io.FileInputStream。(未知源)
位于java.io.FileReader。(未知源)
位于dev_tests.WorkstationModeTest2.main(WorkstationModeTest2.java:76)
dssinit
当前的相对路径是:D:\Feustel\Aufträge\OROP\source\04-Products\OROP
当前目录:D:\Feustel\Aufträge\OROP\source\04-Products\OROP
当前目录使用系统:D:\Feustel\Aufträge\OROP\source\04-Products\OROP
失败:本地创建
例外情况中的第76行是dss初始化后的一行。这就是java;)

是指向我使用的所有com和opendss文件的链接

我将把这个提交给开发com4j的人,以及开发opendss的人


当然,如果这里有人能告诉我这是com4j还是opendss引擎的问题,我会很高兴。不管是否有一个简单的方法来解决这个问题。

好的,OpenDSS开发人员回复并确认了进程级别上工作目录的更改

Java没有注意到这一点。也许这是因为java需要通过它自己的接口来进行更改,以引起注意。不知道

我仍在研究引擎在初始化时强制使用默认工作目录的原因。这可能是在引擎中硬编码的,也可能是自动转换的结果

我当前的解决方案是将引擎的数据路径设置为java工作目录

修改初始化:

// COM-Init
OpenDSS.IDSS DSS = ClassFactory.createDSS();
DSS.dataPath(System.getProperty("user.dir"));
这意味着任何OpenDSS数据的导出都将转储到java工作目录中。这不是最好的解决方案,但它是有效的。我可能会在稍后的节目中把它清除掉

编辑:我已经得到了开发人员的确认。启动时,引擎试图找出它的工作目录应该是什么,并设置为。。。在过程层面上。我不明白为什么会这样。我不知道任何编程语言需要它,因为操作系统已经处理了这个。。。除此之外,我不认为有任何理由在引擎中包含自动化过程

无论如何,除非开发人员改变这一点,否则对于任何使用java接口的人来说,这个问题都将继续存在


我将把它标记为解决方案,直到我得到消息说它已更改…

我不确定如何定义输入文件名,但是,这可能是路径中“\”的问题。发布更多关于如何指定文件的代码!从表面上看,你玩错了路。请告诉我们您的文件位于哪里,我认为您可能需要使用绝对文件路径
// COM-Init
OpenDSS.IDSS DSS = ClassFactory.createDSS();
DSS.dataPath(System.getProperty("user.dir"));