Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> конвертация clob в utf8, записать clob в файл с кодировкой utf8 
:(
    Опции темы
day2030
Дата 19.2.2013, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.9.2009

Репутация: нет
Всего: нет



Здравствуйте.
Подскажите, пожалуйста, необходимо записать clob в тексовый файл в одировке utf8. Для этих целей в бд  oracle была реализованна хранимая процедура на java:
Код

create or replace and compile java source named sendcust_to as
import java.io.*;
import java.sql.*;
import oracle.sql.*;
import oracle.sql.CLOB;
import java.util.*;
import java.lang.*;
import java.sql.SQLException;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.Writer;
public class sendCustXML
{
  public static void sendFile(String dat, oracle.sql.CLOB inClob) throws SQLException, IOException
  {
     Writer writer = null;
     Reader reader = null;
     String nameFile = dat;
     File f = new File("/test/test1/"+nameFile);
     f.createNewFile();
     try {
      writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f),"UTF8"));
      reader = new BufferedReader(inClob.getCharacterStream());      
      int length;
      char[] buf = new char[inClob.getChunkSize()];
      while ((length = reader.read(buf, 0, inClob.getChunkSize())) != -1) {
        writer.write(buf, 0, length);
      }
    } finally {
      if (writer != null) {writer.close();}
      if (reader != null) {reader.close();}
    }
  }
}

В выше указанном коде файл создается в кодировке utf8, но вот данные не совсем корректно пишутся. Чтобы все писалось в файл коррекно, необходимо указать кодировку и BufferedReader. Для этих целей код был переделан:
Код

create or replace and compile java source named sendcust_to as
import java.io.*;
import java.sql.*;
import oracle.sql.*;
import oracle.sql.CLOB;
import java.util.*;
import java.lang.*;
import java.sql.SQLException;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.Writer;
public class sendCustXML
{
  public static void sendFile(String dat, oracle.sql.CLOB inClob) throws SQLException, IOException
  {
     Writer writer = null;
     Reader reader = null;
     String nameFile = dat;
     File f = new File("/test/test1/"+nameFile);
     f.createNewFile();
     try {
      writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f),"UTF8"));
      InputStream in = inClob.getAsciiStream();
      InputStreamReader isr = new InputStreamReader(in, "UTF8");
      reader = new BufferedReader(isr);      
      int length;
      char[] buf = new char[inClob.getChunkSize()];
      while ((length = reader.read(buf, 0, inClob.getChunkSize())) != -1) {
        writer.write(buf, 0, length);
      }
    } finally {
      if (writer != null) {writer.close();}
      if (reader != null) {reader.close();}
    }
  }
}

но это код уже пишет в ANSI. Вообщем не знаю уже куда копать, подскажите пожалуйста что не так??? Как записать clob в utf8 для последующей записи его в файл с кодировкой utf8???? smile 
Немного переделала код:
Код

byte[] buf = new byte[inClob.getBufferSize()];
      while((length = reader.read(buf, 0, inClob.getBufferSize())) != -1)
      {
         writer.write(buf, 0, length);
      }

Но в данном случае проблемма в самом цикле, т.е. сам цикл организован неправильно, а вот как правильно еще не поняла. Пожалуйста, подскажиет, как можно реализовать данную задачу.
PM MAIL   Вверх
day2030
Дата 20.2.2013, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.9.2009

Репутация: нет
Всего: нет



Всем еще раз доброго времени суток.
Может тогда кто подскажет как можно записать байтовый поток в файл, какая последовательность действий необходима для этого? Нужно ли сначала массив байтов перевести в символьный массив или можно сразу писать байты в файл???
PM MAIL   Вверх
batigoal
Дата 20.2.2013, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Можно сразу - с помощью FileOutputStream, например.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.