2017-12-13 7 views
0

最後の列に値を追加したいが、結果が正しくない。私はテストのために3つのファイルがあります。配列値をcsvファイル列に追加できませんでした

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

と私は結果とします:最初、私のファイルが含まれてい

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

が、私の結果:(ノートを:3つのファイル、最初のファイル以下の結果が、他の人と空のファイル)

私は、コンソールに「I」「私は、コードを++」の下に印刷するとき
row1-1 row1-2 newstring1 
row2-1 row2-2 newstring1 

私はしばらく問題を抱えているが、プログラムは(しばらく)のようで走っ: 結果 書き込み i ++(印刷:i = 1) i ++(印刷: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

、ファイルとファイルの内容を反復処理whileループのリストについては、開始時にforループがあります。今では、複数のファイルを読み込む場合、forループ内の変数 "i"を0に初期化する必要があります。そのため、インデックスが範囲外の例外をスローしているのです。また、配列 "addedColumn"は長さが2です。だから私はあなたが2つ以上のレコードを持っている場合には、再びインデックスの範囲外の例外をスローすることになる場合、あなたは2つのレコードを持っているファイルコンテンツを反復処理するときにそれを期待しています。

さらに詳しい説明が必要な場合はお知らせください。

+0

が完了しました。私は0の後にiをリセットする –

関連する問題