我希望在数组值的最后一列中添加值,但结果是错误的。我有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();
}
答案 0 :(得分:0)
根据我看到的代码,你有一个for循环的开始文件列表和一个循环迭代文件的内容。现在,如果您要读取多个文件,则需要将for循环中的变量“i”初始化为0.这就是为什么抛出索引超出范围的异常。此外,数组“addedColumn”的长度为2.因此,我希望当您迭代文件内容时,您只有两条记录,如果您有两条以上的记录,那么它将再次抛出索引超出范围的异常。
如果您需要进一步澄清,请告诉我。