2016-04-04 3 views
0

Я нашел этот пример, как читать двоичный файл из PostgreSQL.Запись данных в файл

conn.setAutoCommit(false); 

     // Get the Large Object Manager to perform operations with 
     LargeObjectManager lobj = ((org.postgresql.PGConnection) conn).getLargeObjectAPI(); 

     ps = conn.prepareStatement("SELECT FILE FROM KNOWLEDGEBASE_FILES WHERE ID = ?"); 
     ps.setInt(1, 333); 
     ResultSet rs = ps.executeQuery(); 
     while (rs.next()) 
     { 
      // Open the large object for reading 
      long oid = rs.getLong(1); 
      LargeObject obj = lobj.open(oid, LargeObjectManager.READ); 

      // Read the data 
      byte buf[] = new byte[obj.size()]; 
      obj.read(buf, 0, obj.size()); 
      // Do something with the data read here 


      FileChannel rwChannel = new RandomAccessFile("License_Agreement.pdf", "rw").getChannel(); 
      ByteBuffer wrBuf = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, buffer.length * number_of_lines); 
      for (int i = 0; i < obj.size(); i++) 
      { 
       wrBuf.put(obj); 
      } 

      // Close the object 
      obj.close(); 
     } 
     rs.close(); 
     ps.close(); 

     // Finally, commit the transaction. 
     conn.commit(); 

Как я могу записать данные в файл с помощью NIO?

На этой линии wrBuf.put(obj); я получаю ошибку:

не подходящий способ нашел для положить (LargeObject) метод ByteBuffer.put (байт) не применяется (аргумент несоответствия; LargeObject не может быть преобразован в байт) метод ByteBuffer.put (ByteBuffer) не применяется (аргумент несоответствия; LargeObject не может быть преобразован в ByteBuffer) метода ByteBuffer.put (байты []) не применяется (аргумент несоответствия; LargeObject не может быть преобразован в байтах [])

ответ

2

Вы мог бы использовать LargeObject::getInputStream:

import java.nio.file.FileSystems; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.StandardCopyOption; 
//... 
while (rs.next()) 
{ 
    long oid = rs.getLong(1); 
    LargeObject obj = lobj.open(oid, LargeObjectManager.READ); 
    Path targetPath = FileSystems.getDefault().getPath("License_Agreement.pdf"); 
    Files.copy(obj.getInputStream(), targetPath, StandardCopyOption.REPLACE_EXISTING); 
    obj.close(); 
} 
+0

По какой-то причине файл не создается после запуска кода. –

+0

файл не доступен для записи, имеет ли пользователь необходимые права? вы получили стек? –

+0

Да, ограничений на запись нет –

Смежные вопросы