1

私は、Excel ファイルから文字列を読み取り、シーケンスと共に csv ファイルに書き込む必要があるプロジェクトに取り組んでいます。

これが私のコードです:

private void readExcelSheet(String inputFile){
//Method to read the input file 
    File excelSheet = new File(inputFile);             
    set1=new LinkedHashSet<String>();
    InputStream inp = null;
    try {
        inp = new FileInputStream(excelSheet);
        wb =WorkbookFactory.create(inp);
        for(int sheetNo=0; sheetNo<wb.getNumberOfSheets();sheetNo++)
        { //counter5++;
            System.out.println(sheetNo);
            map1=new LinkedHashMap<String,ArrayList<String>>();
            Sheet sheet = wb.getSheetAt(sheetNo);
            Iterator<Row> rowIterator = sheet.iterator(); 
            while(rowIterator.hasNext()) {
                Row row = rowIterator.next();
                //array1=new ArrayList<String>();
                temp=row.getCell(0).getStringCellValue();
                System.out.println(temp);
                inputInto(temp);
            }
        }
    }catch (Exception ex) {
        ex.printStackTrace();
    }
}

public void inputInto(String temp1) throws IOException{
    FileWriter writer = new FileWriter(fileName,true);
    PrintWriter out = new PrintWriter(writer);
    out.append("\""+temp+"\"");
    out.append(",");
    out.append((countLines()+1)+"");
    System.out.println(countLines()+1);
    out.append("\n");
    out.flush();
}

public int countLines() throws IOException {
    LineNumberReader reader  = new LineNumberReader(new FileReader(fileName));
    int cnt = 0;
    String lineRead = "";
    while ((lineRead = reader.readLine()) != null) {}
    cnt = reader.getLineNumber(); 
    reader.mark(0);
    reader.reset();
    reader.close();
    return cnt;
}

public static void main(String[] args){
    Token token=new Token();
    token.readExcelSheet("D:/Workspace/sample.xlsx");
}

ここで、readExcelSheet は入力された Excel シートを読み込むメソッドです。inputInto は
csv ファイルに書き込むメソッドです
。countLines は最後の行番号を見つけるメソッドで、シーケンスを見つけます。

しかし、コードを初めて実行しようとすると、シーケンスが「1」になり、2回目に実行すると、シーケンスが「11」と23になり、すぐに取得されます。

ここに私の入力があります:

「ホライゾン デンタル オプション プランは、どの歯科医からも歯科サービスを受ける自由を提供すると同時に、メンバーは、当社の大規模な全国ネットワーク内で歯科医を選択することにより、費用を節約し、利益を最大化することができます。
ホライゾン デンタル オプション プランは、次のことを提供します。 -Horizo​​n Dental オプション プランに参加している歯科医を使用する場合の自己負担額とより高いプランのメリット • 136,000 を超える参加歯科医の全国ネットワークへのアクセス • ネットワーク内の歯科医による 10 ~ 30% の割引 • 予防歯科サービスは 100 をカバー許可された料金の % • 年間免責額オプション • ネットワーク外へのオプション。免責額と共同保険が適用される場合があります。詳細については、プランの詳細をダウンロードしてください。
詳細については、プランの詳細をダウンロードしてください。

誰でもこれで私を助けてくれませんか。ありがとう..

4

1 に答える 1

0

あなたの間違いだと思います

FileWriter writer = new FileWriter(fileName,true);

と言うとtrue、出力ファイルは2回目の呼び出しで削除されず、Javaはそれに書き込みます。その行を削除するだけtrueで、うまくいくと思います。

于 2013-04-29T09:45:12.687 に答える