从 java 程序中读取 MVS DataSet

Posted

技术标签:

【中文标题】从 java 程序中读取 MVS DataSet【英文标题】:Read MVS DataSet from java program 【发布时间】:2020-09-14 08:02:58 【问题描述】:

我正在尝试访问一个名为 X.Y.Z 的数据集; 我的代码是:

ZFile zFile = new ZFile("//X.Y.Z","r");
    try 
        String enc = ZUtil.getDefaultPlatformEncoding();
        InputStream is = zFile.getInputStream();
        BufferedReader rdr = new BufferedReader(new InputStreamReader(is, enc));
        String line;
        while ((line = rdr.readLine()) != null) 
            System.out.println(line);
        ;
    finally 
        zFile.close();
    

我得到了这个例外:

com.ibm.jzos.ZFileException: X.Y.Z: Filename is not a valid MVS dataset or DD name; errno=99 errno2=0x0 last_op=0 errorCode=0x0
    at com.ibm.jzos.ZFile.checkSecurityManager(ZFile.java:1592)
    at com.ibm.jzos.ZFile.<init>(ZFile.java:475)
    at it.Main.test(MainApp.java:20)
com.ibm.jzos.ZFileException: //'X.Y.Z': fopen() failed; EDC5049I The specified file name could not be located.; errno=49 errno2=0xc00b0641 last_op=50 errorCode=0x21708
    at com.ibm.jzos.ZFile.fopen(Native Method)
    at com.ibm.jzos.ZFile.doZFileOpen(ZFile.java:613)
    at com.ibm.jzos.ZFile.<init>(ZFile.java:476)
    at it.Main.test(MainApp.java:22)

有什么建议吗?谢谢。

【问题讨论】:

为什么不通过 JCL 定义 DD,并在您的代码中指定 DD?你为什么为这个问题标记db2 我不能使用 DD,因为我没有用 JCL 调用这个程序;我已将此 jar 作为外部存储过程安装在 db2 中。 异常似乎很明显,'TSTCWLMY.L065291.SUN.JAVALOG' is not found...(对于不存在的数据集,您不能使用读取模式)。 问题是文件存在且名称正确;会不会是权限问题? 如果X 是高级限定符,请尝试使用"//'X.Y.Z'" 【参考方案1】:

如果在 z/OS 上使用双斜杠表示法来指代数据集,则假定数据集的高级限定符 (HLQ) 是当前用户的用户 ID。例如,//X.Y.Z 将解析为 MEAT.X.Y.Z,假设我的用户名是我在 z/OS 上的用户 ID。如果指定的数据集是完全限定的数据集名称,则应添加引号。在您的情况下,//'X.Y.Z' 将解析为 X.Y.Z

【讨论】:

以上是关于从 java 程序中读取 MVS DataSet的主要内容,如果未能解决你的问题,请参考以下文章

应该使用啥代码页/字符集将来自 MVS 系统的数据解释为 Java 环境?

PL/I 程序中的 z/OS MVS 和 z/OS UNIX 互操作?

如何从 unix sed 命令读取大型机文件?

如何将 Qt 5.6 与 MVS 2015 链接?

通过java程序从图像中读取字符值

如何从 java 程序中读取存储过程源代码? [复制]