2017-04-20 84 views
0

目前,我可以從數據庫中獲取將處於BLOB數據類型的數據。 因此,在代碼中它將存儲在字節[]中。 現在我可以通過提字符集(eg.UTF-8)作爲下面的字節數組轉換爲字符串:如何將字節數組轉換爲所有文件類型的字符串

public byte[] mtdFileEncryption(byte[] myData,String fileName) throws DNSException, Exception 
{ 
    String strLocalFolder = SysProperties.getprocessFile_LOCAL_FOLDER(); 
    String strOnlineSSTPublicKey = SysProperties.getOnline_SST_ENCRYPTION_PUBLIC_KEY(); 
    String strFilename = fileName; 
    PGPFileEncryptor fileEncryptor = new com.test.PGPFileEncryptor(); 

    File outputFile = null; 
    FileOutputStream fos = null; 
    OutputStreamWriter osw = null; 
    BufferedWriter bufferOutput = null; 

    File toFile = new File(strLocalFolder); 
    if(!toFile.isDirectory()) 
    { 
    //Create temp folder 
    toFile.mkdir(); 
    } 

    try 
    { 
     //generate file to local folder 
     //outputFile = new File(strLocalFolder + strFilename + ".txt"); 

     outputFile = new File(strLocalFolder + strFilename); 
     fos = new FileOutputStream(outputFile); 
     osw = new OutputStreamWriter(fos); 
     bufferOutput = new BufferedWriter(osw); 
     //WORKING FOR TXT 
     String str = new String(myData, "UTF-8"); 
     bufferOutput.write(str); 

    }catch(Exception e) 
    { 
     e.printStackTrace(); 
     throw e; 
    }finally 
    { 
     if(bufferOutput != null) 
     { 
      bufferOutput.close(); 
      bufferOutput = null; 
     } 

     if (osw != null) 
     { 
      osw.close(); 
      osw = null; 
     } 

     if (fos != null) 
     { 
      fos.close(); 
      fos = null; 
     } 
    } 

這意味着以下可以被轉換爲字符串,並我可以查看的內容.TXT存儲的文件

//WORKING FOR TXT 
     String str = new String(myData, "UTF-8"); 
     bufferOutput.write(str); 

但這種情況不會發生其他文件,.PDF或.xls 我無法查看內容。 我可以知道如何在不指定字符集的情況下將字節數組(myData)轉換爲所有文件類型(.pdf,.xls等)的字符串?

以下是如何將字節數組[]傳遞給方法。 file_content是表中的BLOB數據類型。

String contentString = rsStatementRequest.getValue("file_content"); 
        BASE64Decoder en = new BASE64Decoder(); 
        byte[] contentBytes = en.decodeBuffer(contentString); 
contentBytes = mtdFileEncryption(contentBytes,fileName); 
+1

嘗試使用普通文本編輯器打開同一pdf文件,您將看到相同的結果。所以你的轉換操作是成功的,但不是邏輯。對於轉換字節後的每種文件類型,您應該使用適當的解析器 – strash

+0

該線程可能有幫助:http://stackoverflow.com/questions/5449903/advanced-pdf-parser-for-java – strash

+0

「二進制字節列表(Blob)「可以容納無限數據,但是字節數組只能通過int值進行索引,所以它對int的長度有限制(實際上由於某種原因intmax-8)。 –

回答

2

我建議以二進制形式寫入byte [] BLOB。寫作是因爲文本可能會破壞它,尤其是如果它被加密的話。

public void mtdFileEncryption(byte[] myData,String fileName) throws IOException { 
    String strLocalFolder = SysProperties.getprocessFile_LOCAL_FOLDER(); 
    new File(strLocalFolder).mkdir(); 

    try (FileOutputStream fos = new FileOutputStream(new File(strLocalFolder, fileName)) { 
     fos.write(myData); 
    } 
} 
+0

嗨,彼得,謝謝你。這是最簡單的解決方案,它爲PDF工作。我希望它適用於所有其他類型的文件,如.docx,.xls等。如果我錯了,請糾正我。 – Albert

+0

這是我的代碼:我刪除了上面顯示的BufferedWriter和OutputStreaWriter類: outputFile = new File(strLocalFolder + strFilename); \t \t fos = new FileOutputStream(outputFile); \t \t fos.write(myData); – Albert

+0

@Albert如果你使用'new File(String,String)',你不必擔心路徑分隔符。 –

相關問題