我的目标是检查在网络上的文件夹中是否找到具有特定名称(名称的一部分)的文件,同时还要考虑其下的所有文件夹.为此,我需要一种有效获取给定文件夹内和下的所有文件和文件夹的列表的方法.我的递归函数在本地驱动器上的速度约为2500个/秒,而在网络驱动器上的速度仅为每秒/个.我需要更快的东西.

核心问题是:在包含属性isDirectory或类似属性的文件夹中获取项目列表的最快方法是什么?

我将希望寄托在java.nio的walkFileTree功能上,但是我无法使用它. (版本:带有Java 1.7.0_11-b21且具有Oracle Corporation Java HotSpot™64位服务器VM混合模式的8.4.0.150421(R2014b))

当前问题:我无法使用java.nio中的任何功能

java.io可以工作,例如创建一个文件对象:

jFile = java.io.File('C:\')

% then use jFile.list or jFile.isDirectory or jFile.toPath, it all works!

天真地调用nio失败:

java.nio.file.Files('C:\')

% -> No constructor 'java.nio.file.Files' with matching signature found.

我意识到java.nio.file的工作原理有所不同,要使用Files中的方法,需要一个路径,可以使用java.nio.file.Path.get进行构造.这东西吃线.但这也失败了:

java.nio.file.Paths.get('C:\') % -> No method 'get' with matching signature found for class 'java.nio.file.Paths'.

但是该方法存在:

methods java.nio.file.Paths

% -> Methods for class java.nio.file.Paths:

equals getClass notify toString

get hashCode notifyAll wait

那么,这里出了什么问题?我不允许输入Matlab字符串吗?我应该使用Java字符串吗?这也失败了:

jString = java.lang.String('C:\');

java.nio.file.Paths.get(jString)

% -> No method 'get' with matching signature found for class 'java.nio.file.Paths'.

oracle的一种解决方法是在java.io中创建路径,但是将其提供给java.nio也会失败.

path = java.io.File('C:\').toPath;

java.nio.file.Files.isDirectory(path)

% -> No method 'isDirectory' with matching signature found for class 'java.nio.file.Files'.

因此,我什至无法尝试一下walkFileTree.我不能让java.nio在Matlab中做任何事情.

帮助:有人对如何调用java.nio.file函数或回答我的核心问题有任何想法吗?

ps:到目前为止,没有java.nio的简单方法的示例,示例不包括递归部分,但显示了可怕的性能

策略1:递归使用Matlab的“ dir”函数.这是一个不错的功能,因为它还提供了属性,但是有点慢.在我的起始网络文件夹(包含150个文件/文件夹,路径存储为字符串Sdir)中,以下命令花费34.088842秒:

tic;d=dir(Sdir);toc

策略2:使用java.io.File加快速度,这几乎无济于事,因为isDirectory需要调用.对项名称使用启发式方法太危险了,我被迫使用其中带有点的文件夹.同一目录中的示例31.315587秒:

tic;jFiles = java.io.File(Sdir).listFiles;

LCVdir = arrayfun(@isDirectory, jFiles, 'UniformOutput',0);

toc

解决方法:

这些java.nio.file方法具有variadic signatures.看起来Matlab无法执行使它们透明工作所需的自动装箱,因此您将需要使用其参数的数组形式来调用它们.

java.nio.file.Paths.get的签名为get(String first,String … more).这等效于get(String first,String [] more).

>> java.nio.file.Paths.get('C:\', javaArray('java.lang.String', 0))

ans =

C:\

>> class(ans)

ans =

sun.nio.fs.UnixPath

同样,java.nio.file.Files.isDirectory的签名是isDirectory(路径,LinkOption … options),因此您需要提供options参数.

>> p = java.nio.file.Paths.get('/usr/local', javaArray('java.lang.String', 0));

>> java.nio.file.Files.isDirectory(p, javaArray('java.nio.file.LinkOption', 0))

ans =

logical

1

>>

顺便说一句,Files.walkFileTree方法将要求您实现一个自定义java.nio.file.FileVisitor子类,您需要使用Java而不是普通的Matlab来实现.

另外,由于您在网络驱动器上,因此网络文件I / O可能实际上是您的瓶颈,因此不要希望Java NIO解决方案要快得多.为了真正做到这一点,遍历需要在能够快速访问文件系统数据的机器上运行,甚至更好的是,已经对其进行了索引以进行有效搜索的机器上.

标签:io,directory,nio,matlab,java

来源: https://codeday.me/bug/20191111/2023045.html

matlab怎么做到使用java,如何在Matlab中使用java.nio?相关推荐

  1. 如何在C++中嵌入JAVA程序

    如何在C++中嵌入JAVA程序呢?现在的程序员,不再像以前一样,掌握一种编程语言就可以混得有模有样了,这里为大家讲的,就是C++与Java混合编程.局域网聊天软件举几个简单的例子,一个软件为了快速开发 ...

  2. 如何在eclipse中导入Java项目文件包(方法截图详细步骤)

    如何在eclipse中导入Java项目文件包 首先新创建一个Java项目 第二步导入到我们新创建的Java项目文件包中 首先新创建一个Java项目 首先点击file->再点击new->点击 ...

  3. 在oracle中使用存储过程,如何在ORACLE中使用JAVA存储过程(详解)

    如何在Oracle中使用Java存储过程 (详解) 一.如何缔造java存储过程? 通常有三种步骤来缔造java存储过程. 1.使用oracle的sql语句来缔造: e.g.使用create or r ...

  4. win7关闭java_如何在WIN7中关闭JAVA自动更新

    在win7系统上面安装了JAVA JRE或JDK后,就会启动一个jusched,它会定时检查更新,每次开机都会推荐更新或者升级,可能有的朋友在win7下无论如何都关不掉java客户端的自动更新,而又不 ...

  5. Matlab画圆方向图,如何在matlab里画天线的立体方向图?

    如何在matlab里画天线的立体方向图?有没有具体的函数? 有的,你看下一般的matlab教程里都有着方面的介绍,查一下就可以了 有数据,Matlab可以画 归根到底,画极坐标方向图是坐标变换的问题. ...

  6. matlab 三维y轴平面图,#如何在excel中绘制三维坐标系?#excel怎么画图平面坐标图...

    用excel绘制曲线图时如何进行坐标轴转换 点"插入"->"图表"->"XY图","子图表类型"选择&quo ...

  7. matlab读取txt到矩阵,如何在MATLAB中将文本文件中的数据读入矩阵(How to read data from a text file into a matrix in MATLAB)...

    如何在MATLAB中将文本文件中的数据读入矩阵(How to read data from a text file into a matrix in MATLAB) 我在将.txt文件读入单个矩阵时遇 ...

  8. 如何在eclipse中导入java工程文件和java源代码文件

    一.如何在eclipse中导入工程文件 1.File-->Import 2.General下拉,点一下Existing Projects into Workspace,再点Next 3.点Bro ...

  9. 如何在Ubuntu中安装java jdk

    直接上链接: 在这里采用的是官网的 jdk1.8 ,如:jdk-8u271-linux-x64.tar.gz,需要先去官网下载一个linux 版本的进行安装.       并不要求特定的 Ubuntu ...

  10. amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境

    今天给大家分享一下如何配置java的JDK环境.操作步骤如下: 1.下载好 jdk 的安装文件,我下载的是 jdk-10.0.1_windows-x64_bin.exe 这个版本的安装文件: 2.使用 ...

最新文章

  1. 多实例gpu_MIG技术快速提高AI生产率
  2. 卢京潮自动控制原理ppt_独家资料|29套输配电相关视频教程+PPT课件 ,全方位讲解电气传动自动控制系统、供配电实用技术、自动控制原理,免费领!...
  3. tomcat端口号被占用怎么解决_电脑C盘空间不够用怎么办?Win7解决C盘占用空间大的3个方法!...
  4. C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)
  5. matlab中fliter函数,用C语言实现MATLAB中Filter()函数
  6. JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
  7. 服务端的第六周第二次的课程
  8. oracle11gasm,Oracle11gASM之ACFS创建案例
  9. MFC--CColorDialog的使用
  10. BZOJ 4710 [Jsoi2011]分特产 解题报告
  11. 设计模式C++实现--Decorator模式
  12. python自动化测试报告 之 allure_Pytest+ Allure + Jenkins 自动化测试报告
  13. FT5X06 如何应用在10寸电容屏
  14. [设计模式] 15 解释器模式 Interpreter
  15. 从leap的手掌发出射线,射线碰撞到物体,用红色的小球表示碰撞点,并把碰撞点用linerenderer渲染出来
  16. jboss forge整合 hibersap
  17. 香橙派OrangePi Zero开发板的WiFi连接测试
  18. Sqlite3 stmt 机制操作
  19. 不怕崩溃 Ghost令机房管理化繁为简
  20. vue中如何设置鼠标经过切换样式

热门文章

  1. 实战 SQL!金融机构可疑支付交易的监测 | 原力计划
  2. “弃用 Google AMP!”
  3. 朋友圈发送照片泄露位置?微信:P 完再发!
  4. 防脱洗发水是个伪命题?8979 条数据告诉你答案!
  5. 全球 42 亿 IPv4 地址宣告耗尽!
  6. Google Android 向华为“闭源”!华为手机迎来至暗时刻!
  7. “机海战术”已死!后智能手机时代靠什么才能赢?
  8. 如何掌握所有的编程语言?
  9. 二叉树中是否存在节点和为指定值的路径
  10. php7的核心开发者,php7 五大新特性