将数组值添加到csv文件列失败

时间:2017-12-13 04:19:49

标签: java arrays csv

我希望在数组值的最后一列中添加值,但结果是错误的。我有3个文件供测试。首先,我的文件包含:

row1-1  row1-2
row2-1  row2-2

我希望得到结果:

row1-1  row1-2  newstring1
row2-1  row2-2  newstring2

但是我的结果:(注意:有3个文件,首先将结果归档,但其他文件为空)

row1-1  row1-2  newstring1
row2-1  row2-2  newstring1

我的问题在于,当我在控制台中的“i ++ code”下面打印“i”时,程序就像(在while中): 结果 写 i ++(打印:i = 1) i ++(print:i = 2)

代码运行的原因是什么?在打印之后i = 1然后i = 2。所以,显示错误数组索引。如何解决这个问题?我想创建像每列的唯一ID。感谢。

我的代码:

String [] addedColumn = {"newstring1", "newstring2"};

try {
    session = jsch.getSession("hpx", "10.170.49.20", 22);
    session.setConfig("StrictHostKeyChecking", "no");
    session.setPassword("mypassword");
    session.connect();

    Channel channel = session.openChannel("sftp");
    channel.connect();
    ChannelSftp sftpChannel = (ChannelSftp) channel;

    Vector<ChannelSftp.LsEntry> list = sftpChannel.ls(path_sftp + "*.ONPROGRESS");
    Vector<ChannelSftp.LsEntry> listFile = sftpChannel.ls(path_sftp + "*.txt");
    Vector<ChannelSftp.LsEntry> listOK = sftpChannel.ls(path_sftp + "*.OK");

    String fileNameEntry = null;
    String result = "";
    int i=0;

    if (list.isEmpty()) {
        for (ChannelSftp.LsEntry entry : listFile) {
            fileNameEntry = entry.getFilename();

            // Create new Extention file
            newFile = fileNameEntry.split("\\.", -1);   

            // Copy file to Local
            sftpChannel.get(path_sftp + entry.getFilename(), path_local_input + entry.getFilename());

            try {
                br = new BufferedReader(
                        new InputStreamReader(new FileInputStream(path_local_input + fileNameEntry)));
                bw = new BufferedWriter(
                        new OutputStreamWriter(new FileOutputStream(path_local_output + fileNameEntry)));
                while ((line = br.readLine()) != null) {
                        result = "\t" + addedColumn[i];
                        bw.write(line + result + System.lineSeparator());
                        i++;
                }
                br.close();
                bw.close();
            } catch(Exception e){
                System.out.println(e);
            } 
        }
    }
    sftpChannel.exit();
    session.disconnect();
} catch (JSchException e) {
    e.printStackTrace();
} catch (SftpException e) {
    e.printStackTrace();
} 

1 个答案:

答案 0 :(得分:0)

根据我看到的代码,你有一个for循环的开始文件列表和一个循环迭代文件的内容。现在,如果您要读取多个文件,则需要将for循环中的变量“i”初始化为0.这就是为什么抛出索引超出范围的异常。此外,数组“addedColumn”的长度为2.因此,我希望当您迭代文件内容时,您只有两条记录,如果您有两条以上的记录,那么它将再次抛出索引超出范围的异常。

如果您需要进一步澄清,请告诉我。