JT400 - 显示SpooledFile的内容

时间:2015-02-12 16:59:11

标签: java ibm-midrange jt400

我尝试使用库jt40显示SpooledFile的内容。 我使用这段代码:

public static void printJogLog(AS400 as400, Job j) {
    SpooledFile spooledFile = new SpooledFile(as400, "QPJOBLOG", 1, j.getName(), j.getUser(), j.getNumber());

    try {
        PrintParameterList printParms = new PrintParameterList();
        printParms.setParameter(PrintObject.ATTR_WORKSTATION_CUST_OBJECT, "/QSYS.LIB/QWPDEFAULT.WSCST");
        printParms.setParameter(PrintObject.ATTR_MFGTYPE, "*WSCST");
        PrintObjectPageInputStream is = spooledFile.getPageInputStream(printParms);
        PrintObjectTransformedInputStream in = spooledFile.getTransformedInputStream(printParms);

        byte[] buf = new byte[32767];
        StringBuffer sbuf = new StringBuffer();
        int bytesRead = 0;
        do {
            bytesRead = in.read(buf);
            if (bytesRead != -1) { // process the spooled file data.
                sbuf.append(new String(buf, 1, bytesRead, "CP936"));
            }
        } while (bytesRead != -1);
        System.out.println(sbuf.toString());

        BufferedReader d = new BufferedReader(new InputStreamReader(is, "UTF8"));
        String data = "";
        String pageSpool = "";
        while ((data = d.readLine()) != null) {
            pageSpool += data + "\n";
        }
        System.out.println(pageSpool);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

它打印SpooledFile的内容,但我遇到特殊字符问题。 我得到这样的东西:

  

CPF412C Echappement 40 12/02/15 17:08:33,699347 QTAERR QSYS 00EA QSRVALDV QSYS * STMT                                        目的地模块。 。 。 :QSRVALDV                                        处理目的地。 :OPENVOLUME                                        说明。 。 。 。 。 。 。 。 :3716                                        信息 。 。 。 。 :Cartouche PPRD05 introuvable                                        原因。 。 。 。 。 :La cartouche PPRD05 a伥�indiqu俥pour l'unit�de                                          bandoth妐ue TAPVTL01,mais elle n' existe pas dans l'unit�TAPVTL01。阙                                          公平的。 。 。 :效果和不可思议的suivantes,puis renouvelez                                          votre demande: - Sp俢ifiez un identificateur de cartouche correct ou                                          ins俽ez la cartouche dans la biblioth妐ue。 La cartouche en a peut-坱re伥�                                          retir俥。 - Si vous avezindiqu�VOL(* MOUNT),l' identificateur de la                                          漩涡花饰,一个pe pas pas�伥伥伥伥伥�伥伥伥伥伥伥伥伥Indiquez une cartouche pour le                                          param妕re VOL。 - Si l'事件持续,mettez l'unit�horsfonction,puis                                          remettez-la en fonction�l' aide de la commande VRYCFG(Changer l'伥at d' une                                          配置)en seiquant le param妕re RESET(* YES)。 - Si la commande                                          ADDTAPCTG(Ajouter une cartouche de bande)a伥�俶ise,il se peut que la                                          cartouche ait伥�retir俥du guichet en libre-service avant son utilization。

我想我需要为PrintObjet设置一些参数,但我不知道如何选择好的参数和值。

有人可以解释我如何知道我需要哪个参数吗?

2 个答案:

答案 0 :(得分:1)

我在这里找到了一个解决方案: http://fixunix.com/ibm-as400/258696-java-read-french-spool.html

我修改我的功能:

public static void printJobLog2(AS400 as400, Job job) {
    SpooledFile spooledFile = new SpooledFile(as400, "QPJOBLOG", 1, job.getName(), job.getUser(), job.getNumber());
    PrintParameterList printParms = new PrintParameterList();
    printParms.setParameter(PrintObject.ATTR_WORKSTATION_CUST_OBJECT, "/QSYS.LIB/QWPDEFAULT.WSCST");
    printParms.setParameter(PrintObject.ATTR_MFGTYPE, "*WSCST");
    try {
        InputStreamReader in = new
                InputStreamReader(spooledFile.getTransformedInputStream(printParms), "cp850");
        char[] buf = new char[32767];
        StringBuffer sbuf = new StringBuffer();
        if (in.ready()) {
            int bytesRead = 0;
            bytesRead = in.read(buf, 0, buf.length);
            while (bytesRead > 0) {
                sbuf.append(buf, 0, bytesRead);
                bytesRead = in.read(buf, 0, buf.length);
            }
        }
        System.out.println(sbuf.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

现在可行。

  

CPF412C Echappement 40 16/02/15 08:55:14,184776 QTAERR QSYS 00EA QSRVALDV QSYS * STMT                                        目的地模块。 。 。 :QSRVALDV                                        Procédurededestination。 :OPENVOLUME                                        说明。 。 。 。 。 。 。 。 :3716                                        信息 。 。 。 。 :Cartouche SCOH07 introuvable                                        原因。 。 。 。 。 :La cartouche SCOH07aétéindiquéepourl'unitéde                                          bandothèqueTAPVTL01,mais elle n'existe pas dans l'unitéTAPVTL01。

答案 1 :(得分:0)

看起来像CCSID不匹配。您确定要用UTF8打开InputStreamReader吗?尝试BufferedReader d = new BufferedReader(new InputStreamReader(is));并让机器决定字符集。