Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как заставить работать этот код


Автор: Lepus007 6.9.2015, 19:09
Здравствуйте, помогите разобраться с ошибкой. Это первая моя программа . Сильно не ругайтесь.
Программа из текстового документа получает ссылки парсит веб страницу. если попадаются нужные строки она их сохраняет в ексель документ. Все идет хорошо до 9-вятой ссылки потом программа выкидует ошибку
Exception in thread "main" java.lang.IllegalArgumentException: The maximum length of cell contents (text) is 32,767 characters
at org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(HSSFCell.java:552)
at org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(HSSFCell.java:527)

Подскажите что не так голову уже сломал, не могу понять в чем проблема.

Подумал что ексель документ сразу не записывается, переполняется книга и вылетает ошибка.
Переделал чтоб данные сохранялись в блокнот, таже проблема на 9-вятой ссылки выпадает ошибка.
Код

import java.io.BufferedReader;
import java.io.File;
 
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
 
import java.io.FileOutputStream;
import java.io.IOException;
 
import java.io.RandomAccessFile;
 
 
 
public class App12 {
    
public static void main(String[] args) throws FileNotFoundException, IOException   {
    
        String line; 
        String opisanieOFF = "</div>";//
        String opisanie = "\"b-content__body b-user-content\"";//
        String price1 = "\"b-product__price\"";//
        String roa1;
        String roa2;
        String stroka_kateg = "pix123 ";
        String price_start = "price\">";
        String price_stop = "</p>";
        String foto_ON = "b-centered-image b-product__image";
        String foto_start = "href=\"";
        String foto_stop = "jpg\"";
        String jpg = "jpg";
 
        int ZapOpisanie = 0;//
        int ind = 0;
        int whil = 0;//
        int result = 0;
        int ss = 0;
        int row1 = 0;
        int cell1 = 0;
        int start = 0;
        int stop = 0;
 
        
        ArrayList<String> opisArrai = new ArrayList<String>();            
        StringBuilder builder = new StringBuilder();
        
       
        Workbook wb = new  HSSFWorkbook();
        Sheet sheet0 = wb.createSheet("Лист_1");        
        FileOutputStream fos = new FileOutputStream("C:/spisok.XLS ");
        //Row row = sheet0.createRow(row1);
 
        BufferedReader reader1 = new BufferedReader(new FileReader("C:\\Users\\Nout\\Desktop\\xxx.txt"));
        String line1;
        List<String> lines = new ArrayList<String>();
while ((line1 = reader1.readLine()) != null) {
            lines.add(line1);
            Row row = sheet0.createRow(row1);
           // System.out.println(line);
          boolean isContain4 = line1.contains(stroka_kateg);
                if (isContain4 == true){
                  System.out.println(line1);
                  cell1 = 0;                    
                    Cell cell = row.createCell(cell1);
                    cell.setCellValue(line1); 
                    row1++;
                }
                else
                {
          BufferedReader reader = null;
       // try {
            URL site = new URL(line1);
            reader = new BufferedReader(new InputStreamReader(site.openStream()));
            while ((line = reader.readLine()) != null) {
        
        
 
            
 
        
                boolean isContain3 = line.contains(opisanieOFF);
                if (isContain3 == true){
                  ZapOpisanie = 0;
                 // System.out.println(line);
                }
                  
                if (ZapOpisanie == 1){                   
                    
                    opisArrai.add(line);
                    ind++;                
 
                }
                boolean isContain5 = line.contains(opisanie);
                if (isContain5 == true){
                  ZapOpisanie = 1;
                 // System.out.println(line);
                }
                if(ind != 0 & line.contains(opisanieOFF )){
                    
                    builder.append(opisArrai);
                    roa1 = String.valueOf(builder);
                   // System.out.println(roa1);               
                    
                    cell1 = 2;                    
                    Cell cell = row.createCell(cell1);
                    cell.setCellValue(roa1);
                    roa1 = null;                    
                    row1++;
                    ind = 0;
                    
                   
                }
 
 
             boolean isContain1 = line.contains(price1);
                if (isContain1 == true){ 
                    start = line.indexOf( price_start);                    
                    stop = line.indexOf( price_stop,start);                  
                    roa1 = String.valueOf(line.substring(start, stop));
                   // System.out.println(roa1 );
                    
                    cell1 = 1;                    
                    Cell cell = row.createCell(cell1);
                    cell.setCellValue(roa1);
                    roa1 = null;
                    
                    //row1++;
                   
                } 
 
  
              boolean isContain2 = line.contains(foto_ON);
                if (isContain2 == true){
                    start = line.indexOf( foto_start);                    
                    stop = line.indexOf( foto_stop,start);                  
                    roa1 = String.valueOf(line.substring(start, stop));
                    //System.out.println(line );
                     roa1 = roa1.concat(jpg);
                    // System.out.println(roa1 );
                    cell1 = 5;                    
                    Cell cell = row.createCell(cell1);
                    cell.setCellValue(roa1);
                    roa1 = null;
                    
                }    
                
 
                
                
               
                  
                  
                
                
        
                
            
}reader.close();

whil++;
System.out.println(whil);
}
                
}reader1.close();
             
               wb.write(fos);
               fos.close();
 
}
 
}


Чтобы программа заработала нужно создать текстовый документ и указать путь к нему вот здесь
Код


BufferedReader reader1 = new BufferedReader(new FileReader("C:\\Users\\Nout\\Desktop\\xxx.txt"));


и в кинуть туда вот эти ссылки
Код

http://top-store.in.ua/p78484634-schetka-metla-fanatuk.html
http://top-store.in.ua/p78484635-sch...a-fanatik.html
http://top-store.in.ua/p78484636-sch...a-fanatik.html
http://top-store.in.ua/p78484638-sch...a-fanatik.html
http://top-store.in.ua/p78484639-sch...a-fanatik.html
http://top-store.in.ua/p78484641-sch...etla-push.html
http://top-store.in.ua/p78484642-sch...a-fanatik.html
http://top-store.in.ua/p78484644-sch...a-fanatik.html
http://top-store.in.ua/p78484645-sch...-uglovaya.html
http://top-store.in.ua/p78484647-sch...a-fanatik.html
http://top-store.in.ua/p78484648-sch...-uglovaya.html
http://top-store.in.ua/p78484649-met...ka-angled.html

Автор: Samotnik 6.9.2015, 20:57
Цитата(Lepus007 @  6.9.2015,  19:09 Найти цитируемый пост)
и в кинуть туда вот эти ссылки

Отредактируй файл, что бы без троеточие был

Добавлено через 12 минут и 16 секунд
Lepus007, а какие версии poi используешь? У меня 3.9 выдает ошибку
Цитата

Error:(50, 38) java: incompatible types: org.apache.poi.hssf.usermodel.HSSFSheet cannot be converted to org.apache.poi.ss.usermodel.Sheet

Автор: Lepus007 6.9.2015, 21:36
версия poi-bin-3.12-20150511.
попробуй с моими ссылками эта ошибка вылетала тоже у меня. Но я пока не разбирался.

http://top-store.in.ua/p78484634-schetka-metla-fanatuk.html
http://top-store.in.ua/p78484636-schetka-metla-fanatik.html
http://top-store.in.ua/p78484638-schetka-metla-fanatik.html
http://top-store.in.ua/p78484639-schetka-metla-fanatik.html
http://top-store.in.ua/p78484641-schetka-metla-push.html
http://top-store.in.ua/p78484642-schetka-metla-fanatik.html
http://top-store.in.ua/p78484644-schetka-metla-fanatik.html
http://top-store.in.ua/p78484645-schetka-metla-uglovaya.html
http://top-store.in.ua/p78484648-schetka-metla-uglovaya.html
http://top-store.in.ua/p78484649-metla-schetka-angled.html

Автор: Lepus007 6.9.2015, 23:21
Закомментировал вот эту строку 
Код

opisArrai.add(line);  

Программа заработала .   Я так понимаю происходит переполнения массива.  Как можно обнулить удалить массив???  Как обойти этот баг?

Автор: Lepus007 6.9.2015, 23:49
opisArrai.clear();   продлил жизнь всего лишь до 37 ссылок. 
37 ссылок прошел и вылетела та же самая ошибка.

Автор: r00tGER 7.9.2015, 09:40
Ну, написано же:
Цитата

   The maximum length of cell contents (text) is 32,767 characters
   

Значит в ячейку пытается попасть больше 32767 символов.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Kak-zastavit-rabotat-etot-kod-id55ec65d5ae201519388b4567#findElement_E7045_55ed314fae201503268635b9_0

Автор: Lepus007 7.9.2015, 14:02
Цитата(r00tGER @  7.9.2015,  09:40 Найти цитируемый пост)
Значит в ячейку пытается попасть больше 32767 символов.

как это обойти????  Может есть какие-то другие массивы?  Так много символов лезит в ячейку не сразу. они накапливаются в ячейке в ходе работы программы нужно после каждого цикла обнулять . Или подскажите варианты?????

Автор: Lepus007 7.9.2015, 21:02
ребятки все заработало. тема закрыта. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)