Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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 使用服务器ip而不是字母获取路径_Java_Windows_File_Network Shares - Fatal编程技术网

Java 使用服务器ip而不是字母获取路径

Java 使用服务器ip而不是字母获取路径,java,windows,file,network-shares,Java,Windows,File,Network Shares,我正在用java编写一个应用程序,它读取目录和文件的所有路径。这已经起作用了。要迁移这些文件,我确实需要绝对路径,即服务器IP而不是字母(在Windows系统上) 我尝试了file类中的以下方法: System.out.println(file.getCanonicalPath()); System.out.println(file.getAbsolutePath()); 这两种方法都打印出确切的windows路径,而不是服务器IP,在服务器IP中我读取所有路径并将它们写入txt文件。您可以使

我正在用java编写一个应用程序,它读取目录和文件的所有路径。这已经起作用了。要迁移这些文件,我确实需要绝对路径,即服务器IP而不是字母(在Windows系统上)

我尝试了file类中的以下方法:

System.out.println(file.getCanonicalPath());
System.out.println(file.getAbsolutePath());
这两种方法都打印出确切的windows路径,而不是服务器IP,在服务器IP中我读取所有路径并将它们写入txt文件。

您可以使用以下方法

import java.net.InetAddress;
... <your class code>
InetAddress ip = InetAddress.getLocalHost();
// Use variable ip wherever needed
导入java.net.InetAddress;
... 
InetAddress ip=InetAddress.getLocalHost();
//在需要的地方使用变量ip

正如您所知,Java是可移植的,允许您编写在多个操作系统上运行的代码。当您调用这两种方法中的任何一种时,Java都会询问底层操作系统该文件的路径,并返回您看到的内容。在Windows计算机上,如果是映射(或本地)驱动器,则这将是包含驱动器号的路径。有时您可能会得到一个UNC路径,其中包括服务器名称和共享。对于其他操作系统,这种行为将略有不同,因为它将返回该操作系统看到的路径。然而,Java实际上并不知道或直接理解有关驱动器号或操作系统的任何内容

因此,这些方法不能满足您的要求。对于Windows,听起来像是在寻找UNC路径,它仍然不提供IP地址,而是提供服务器名称。它们采用这种格式(并被认为是绝对的):

通常,映射驱动器会将UNC路径的
\\server\u name\share\u name
部分转换为字母。因此请注意,信件不一定直接映射到服务器,而是映射到特定服务器上的共享(或Windows DFS共享)

为此,您将失去Java提供的可移植性。目前,我知道如何从映射的字母驱动器检索服务器名称的唯一方法是使用WMI。Java可以使用WMI库;一些使用JNI,另一些使用其他脚本方法。WMI代表Windows Management Instrumentation。这允许您对Windows进行类似SQL的调用,以查询有关系统的信息。在这种情况下,您需要解析返回给您的驱动器号,然后进行WMI调用

以下是一篇关于使用WMI执行此操作的文章:

请注意,上面的链接将向您展示如何使用VBScript进行操作,但概念是相同的

下面是关于Java WMI接口的另一个问题:

使用WMI获取映射驱动器所在位置的主机名后,或者如果最初返回UNC路径并解析出服务器名称,则可以调用以下命令获取IP:

InetAddress address = InetAddress.getByName("COMPUTER_NAME"); 
String ip = address.getHostAddress();
需要注意的一点是,要使用WMI,有时需要提升权限,所以请注意这种可能性


请做好准备,因为这比您预期的要复杂得多,需要进行大量字符串解析才能真正提取所需的数据。

这并不能回答OPs问题,也不正确,因为它返回的是运行代码的机器的
InetAddress
对象,而不是远程文件所在的位置。
InetAddress address = InetAddress.getByName("COMPUTER_NAME"); 
String ip = address.getHostAddress();