конвертация clob в utf8

 
0
 
Java
ava
day2030 | 19.02.2013, 14:32
Здравствуйте.
Подскажите, пожалуйста, необходимо записать 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);
      }

Но в данном случае проблемма в самом цикле, т.е. сам цикл организован неправильно, а вот как правильно еще не поняла. Пожалуйста, подскажиет, как можно реализовать данную задачу.
Ответы (2)
ava
day2030 | 20.02.2013, 08:10 #
Всем еще раз доброго времени суток.
Может тогда кто подскажет как можно записать байтовый поток в файл, какая последовательность действий необходима для этого? Нужно ли сначала массив байтов перевести в символьный массив или можно сразу писать байты в файл???
ava
batigoal | 20.02.2013, 08:24 #
Можно сразу - с помощью FileOutputStream, например.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить