`
zy116494718
  • 浏览: 476839 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java读取文件夹位置

    博客分类:
  • Java
 
阅读更多

      需求: 在JAVA中编写.bat命令来实现对MySQL的导入和导出。但是.bat命令中需要有MySQL的具体地址,而不同的服务器MySQL的地址可能不一样,如果写死的话那每次部署到新的服务器中还要修改class代码,所以考虑写一个监听器来获取该服务器中MySQL的位置,有两种方法:

      1)迭代服务器的文件夹,找到MySQL文件夹的位置。

 

public static void main(String[] args) { System.out.println(search(new File("test.txt"), new File("D:/"))); } // 返回所有与 test 同名的文件或文件夹 static List<File> search(File wanted, File dirToStartFrom) { List<File> matches = new ArrayList<File>(); for (File file: dirToStartFrom.listFiles()) if (new File(file.getName()).equals(wanted)) // 让 equals 方法做跨平台的判断 matches.add(file); else if (file.listFiles() != null) // 只处理可访问的文件夹 matches.addAll(search(wanted, file)); return matches; }

 


 

   这种方式可行,但是迭代所有文件夹效率太慢。

 

2)通过注册表来找到安装文件的位置。

  

     可以通过java.util.prefs.* 中的包,但是该包只可以在 HKEY_LOCAL_MACHINE\Software\JavaSoft\prefs和HKEY_LOCAL_USER\Software\JavaSoft\prefs 位置下进行注册表的读写,对其他位置操作就不方便,因为定死了root只能在以上两个位置。这种方法唯一的缺点就是不可以选择在注册表的哪个节点下写入键值!

     但是可以通过开源的com.ice.jni.registry包来实现对任意位置的注册表进行操作。

   

    首先在http://www.trustice.com/java/jnireg/index.shtml这里可以下载到需要的包和源代码。第一步:把下载下来的jar包加载到工程内,第二步,把与jar包在一起的dll文件拷贝到你jdk安装目录下\jre\bin文件夹下”

   

       代码示例: 

 

       

     public static void main(String[] args) {
       //创建注册表项并设置相应的值
       try {
         RegistryKey software = Registry.HKEY_LOCAL_MACHINE
           .openSubKey("SOFTWARE");
         RegistryKey subKey = software.createSubKey("SubKeyName", "");
         subKey.setValue(new RegStringValue(subKey, "subKey1",
           "subKey1Value"));
         subKey.setValue(new RegStringValue(subKey, "subKey2",
           "subKey2Value"));
         subKey.closeKey();
       } catch (NoSuchKeyException e) {
         e.printStackTrace();
       } catch (RegistryException e) {
         e.printStackTrace();
       }
                  
       //打开注册表项并读出相应的值
       try {
         RegistryKey software = Registry.HKEY_LOCAL_MACHINE.
           openSubKey("SOFTWARE");
         RegistryKey subKey = software.openSubKey("MySQL AB");
         RegistryKey mysql = subKey.openSubKey("MySQL Server 5.1");
         String mysqlLocation = mysql.getStringValue("Location");
        
         System.out.println(mysqlLocation);

         subKey.closeKey();
       } catch (NoSuchKeyException e) {
         e.printStackTrace();
       } catch (RegistryException e) {
         e.printStackTrace();
       }                     
     }

 

 

 

 下面详细的描述一下这个该包中的类,数量不是很多:

  • HexNumberFormat 用来格式化和分析十六进制整数。
  • RegBinaryValue 表示类型为REG_BINARY的注册表值。REG_BINARY是指任意形式的二进制数。
  • RegDWordValue 表示类型为REG_DWORD的注册表值。REG_DWORD是指一个32位的整数。根据该整数的字节序不同又分为REG_DWORD_LITTLE_ENDIAN和REG_DWORD_BIG_ENDIAN。在Windows中REG_DWORD和REG_DWORD_LITTLE_ENDIAN有相同的含义。
  • RegistryValue 表示任意类型的注册表值,这是一个抽象类,不能被实例化。
  • RegMultiStringValue 表示类型为REG_MULTI_SZ的注册表值。REG_MULTI_SZ是一个null-terminated的字符串的序列。
  • RegStringValue 表示类型为REG_SZ和REG_EXPAND_SZ的注册表值。REG_SZ是指一个null-terminated的字符串,REG_EXPAND_SZ是指一个含有未展开的环境变量的null-terminated的字符串。
  • Registry 这个类定义了定级项(Key),包括HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG、HKEY_CURRENT_USER、HKEY_DYN_DATA、HKEY_LOCAL_MACHINE、HKEY_PERFORMANCE_DATA和HKEY_USERS。还定义了错误代码,这些错误代码会包含在RegistryException中。最后是一些工具方法,如dumpHexData、exportRegistryKey、getErrorMessage、getTopLevelKey、openSubkey、parseArgumentString、parseArgumentVector、splitString和usage。
  • RegistryKey 定义了注册表的一个表项(Key)和相关的一些操作。

RegistryKey的方法概要:

 

方法 简短描述
void closeKey() 关闭该subkey。
RegistryKey connectRegistry(java.lang.String hostName) 连接远程主机hostName的注册表。
RegistryKey createSubKey(java.lang.String subkey, java.lang.String className) 创建和打开该key的subkey,具有写权限。
RegistryKey createSubKey(java.lang.String subKey, java.lang.String className, int access) 创建和打开该key的subkey,具有指定的权限。
int decrDoubleWord(java.lang.String valueName) 该方法将消减REG_DWORD的值。
void deleteSubKey(java.lang.String subKey) 删除该subkey。
void deleteValue(java.lang.String valueName) 删除一个命名的值。
static java.lang.String expandEnvStrings(java.lang.String exString) 展开exString中的环境变量。
void export(java.io.PrintWriter out, boolean descend) 导出key。
void finalize() 重载了的finalize()方法,确保能够关闭key。
void flushKey() 确保这个key被写到磁盘,对性能有一定的影响。
java.lang.String getDefaultValue() 得到该key的默认值。
java.lang.String getFullName() 得到key的全名。
int getMaxSubkeyLength() 得到所有subkey名称的最大长度。
int getMaxValueDataLength() 得到所有subkey值的最大长度。
int getMaxValueNameLength() 得到所有值的名称的最大长度。
java.lang.String getName() 得到该key的名称。
int getNumberSubkeys() 得到subkey的数量。
int getNumberValues() 得到值的数量。
java.lang.String getStringValue(java.lang.String valueName) 得到REG_SZ或REG_EXPAND_SZ的值。
RegistryValue getValue(java.lang.String valueName) 得到valueName的值。
boolean hasDefaultValue() 判断该key是否有默认值。
boolean hasOnlyDefaultValue() 判断该key是否只有默认值。
int incrDoubleWord(java.lang.String valueName) 该方法将增强REG_DWORD的值。
java.util.Enumeration keyElements() 枚举该key的subkey的名称。
RegistryKey openSubKey(java.lang.String subkey) 打开该key的subkey,具有写权限。
RegistryKey openSubKey(java.lang.String subKey, int access) 打开该key的subkey,具有指定的权限。
java.lang.String regEnumKey(int index) 得到该key在index处的subkey。
java.lang.String regEnumValue(int index) 得到该key在index处的subkey的值。
void setCreated(boolean created) 设置该key的created状态。
void setValue(RegistryValue value) 设置该key的值。
void setValue(java.lang.String valueName, RegistryValue value) 设置valueName的值。
java.util.Enumeration valueElements() 枚举该key的值的名称。
boolean wasCreated() 判断该key是被opened还是被created和opened。


 

0
1
分享到:
评论

相关推荐

    java读取某个文件夹下的所有文件

    java读取某个文件夹下的所有文件 很不错可以看看 不要分

    java 递归读取文件夹 读取文件 写文件

    java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...

    读取文件夹中所有文件中的内容

    本篇主要介绍了如何使用Java来读取文件夹中所有文件的内容,并对这些内容进行简单的处理(如替换字符)。通过这种方式,可以方便地处理大量文件的数据,为后续的数据分析或处理提供基础。此外,还介绍了Java中与文件...

    java读取win共享文件夹

    在Java编程环境中,读取Windows共享文件夹的内容并将其保存到本地是一项常见的任务,尤其在分布式系统或跨平台协作中。下面将详细讲解如何通过Java实现这一功能,以及涉及的相关知识点。 首先,Java中没有内置的...

    获取文件夹里所有图片

    这个任务可以通过编程语言中的文件系统操作来实现,例如Python、Java、C#等。以下是一个关于如何在Python中获取文件夹内所有图片路径的详细解释。 首先,你需要导入Python的`os`和`glob`库。`os`库提供了与操作系统...

    Java 遍历文件夹内文件

    在Java编程中,遍历文件夹内的文件是一项常见的任务,特别是在处理文件系统操作时。这个话题涉及到了Java的I/O(输入/输出)流、文件系统API和递归概念。以下是对这一主题的详细讲解: 首先,Java提供了一个强大的`...

    java中读取目录下指定的文件

    在Java编程语言中,读取目录下指定的文件是一项常见的任务,这主要涉及到文件I/O操作。Java提供了丰富的API来处理文件系统相关的操作,包括读取、创建、删除文件以及遍历目录等。这里我们将详细讲解如何在Java中实现...

    java读取文件夹中视频的视频信息.视频的大小,时长,名字等等

    125分50秒---162.81M---LabView01---第10章数据的显示.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView01-第10章数据的显示.wmv 92分2秒---143.46M---LabView02---第11章文件的IO及保存.wmv---F:/Resource/...

    java 按顺序读取文件

    在Java编程语言中,按顺序读取文件是基础且重要的操作。这通常涉及到使用I/O流(Input/Output Stream)来处理文件数据。本篇文章将深入探讨如何在Java中实现按顺序读取文件,以及涉及的相关知识点。 首先,Java提供...

    读取文件夹下所有文件

    ### IT知识点:Java读取文件夹下所有文件(包括子文件夹) 在Java编程中,读取文件夹下的所有文件,尤其是包含子文件夹中的文件,是一项常见的需求,尤其是在进行文件管理、数据处理或构建文件系统相关的应用时。...

    Java实现读取文件夹下(包括子目录)所有文件的文件名

    以下是一个详细的Java实现,用于读取文件夹下(包括子目录)所有文件的文件名: 首先,我们创建一个名为`FileList`的类,它包含以下几个成员变量: 1. `dir_name`: 用来存储文件夹的路径。 2. `list_name`: 用来...

    java读取txt文件内容(java快速读取,程序已调试通)

    java读取txt文件,可以以文件路径构造这个流,:FileInputStream fin = new FileInputStream("d:/test.txt"); 然后使用这个流直接读取到文件,再使用reader构造BufferedReader,按行读取一整行的文本,作为字符串返回...

    基于opencv读取一个文件夹下所有图像并显示

    要读取文件夹中的所有图像,我们需要遍历文件夹,获取所有图像文件的路径,然后使用OpenCV的`imread()`函数加载这些图像。`imread()`函数可以接受一个字符串参数,这个参数是图像文件的路径,它可以读取各种常见的...

    java读取局域网共享机器文件

    要实现Java读取局域网共享文件,主要涉及以下步骤和知识点: 1. **网络路径表示**:Java中,网络路径通常以UNC(Universal Naming Convention)格式表示,形如`\\hostname\shared_directory\file.txt`。这里`...

    运用java压缩文件夹并备份至目标文件夹

    本文将详细讲解如何运用Java来实现文件夹的压缩,并将其备份到目标文件夹。首先,我们需要了解Java中用于处理压缩文件的核心库——`java.util.zip`。 在Java中,我们可以使用`ZipOutputStream`类来创建ZIP压缩文件...

    读取文件夹中xml文件

    循环遍历文件夹,并且用I/O流读取该文件夹内的xml文件,并且输出到另一个文件夹下

    java 读取远程共享文件

    java 读取远程共享文件,一个操作简单的读取远程资源的控件。

    java代码-使用java解决读取指定文件夹下的所有文件名称的源代码

    java代码-使用java解决读取指定文件夹下的所有文件名称的源代码

    java压缩文件以及文件夹

    本文将深入探讨如何使用Java来处理压缩文件,特别是针对标题提及的“java压缩文件以及文件夹”。我们将主要关注`ZipCompressor.java`这个类,它是实现文件和文件夹压缩的核心工具。 首先,让我们了解`java.util.zip...

    java 读取局域网机器上共享文件

    java 读取局域网机器上共享文件,以经过测试。

Global site tag (gtag.js) - Google Analytics