2015-04-24 22 views
0

我試圖將字符串字節存儲到文本文件中,它在我的電腦中完美工作,但是當我嘗試將其實施到我的Android項目中時,它將其存儲但是當我想要返回字符串字節並將其轉換爲原始字節時,它不起作用。再次它在我的電腦上工作,我不知道爲什麼它不適用於我的Android項目。Android,當讀取存儲的字符串字節數組時,它返回不同的字節數組值

CODE:

try { 
      String y = "Yyyyyyy"; 
      try { 
       File file1 = new File(Environment.getExternalStorageDirectory() + File.separator + "test/test/newFile.txt"); 
       if (!file1.createNewFile()) { 
        EncryptedObject a = encryptedMessage.encrypt(y, "test", "test"); 
        Log.e("BYTES FROM TEXT1", Arrays.toString(a.getEncryptedBytes())); 
        String example = new String(a.getEncryptedBytes()); 
        Log.e("STRINGGGGG", example); 
        BufferedWriter buffer = new BufferedWriter(new FileWriter(file1)); 
        buffer.write(example); 
        buffer.flush(); 
        buffer.close(); 

        BufferedReader readFile = new BufferedReader(new FileReader(file1)); 
        String get_text = ""; 
        String lines = null; 

        while ((lines = readFile.readLine()) != null) { 
         get_text += lines; // Gets each line 
        } 
        readFile.close(); 
        //THE PROBLEM SEEMS TO START HERE 
        byte[] dec = get_text.getBytes(Charset.forName("UTF-8")); 
        Log.e("TEXT", get_text); 
        Log.e("BYTES FROM TEXT", Arrays.toString(dec)); 

       } else { 
        System.out.println("File Already Exist"); 

       } 

      } catch (Exception e) { 
       e.getCause(); 
      } 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 

日誌:

04-24 16:41:42.208 2934-2934/com.test.test E/ENCRYPTED TEXT﹕ ϩ{��� 
04-24 16:41:42.218 2934-2934/com.test.test E/ENCRYPTED TEXT﹕ [-49, -87, 123, -15, 1, -84, -11] 
04-24 16:41:42.218 2934-2934/com.test.test E/BYTES FROM TEXT1﹕ [-49, -87, 123, -15, 1, -84, -11] 
04-24 16:41:42.218 2934-2934/com.test.test E/STRINGGGGG﹕ ϩ{��� 
04-24 16:41:42.218 2934-2934/com.test.test E/TEXT﹕ ϩ{��� 
04-24 16:41:42.218 2934-2934/com.test.test E/BYTES FROM TEXT﹕ [-49, -87, 123, -17, -65, -67, 1, -17, -65, -67, -17, -65, -67] 

爲什麼返回不同的字節值?我感謝任何幫助,謝謝。 EDITED。

回答

0

new BufferedWriter(new FileWriter(file1)); 

new BufferedReader(new FileReader(file1)); 
try { 
    String y = "Yyyyyyy"; 
    byte[] a = y.getBytes(Charset.forName("UTF-8")); 
    Log.e("TEXT", y); 
    Log.e("BYTES FROM TEXT", Arrays.toString(a)); 

    try { 
     File file1 = new File("test.txt"); 
     if (file1.createNewFile()) { 
      String example = new String(a); 

      BufferedWriter buffer = new BufferedWriter(new FileWriter(file1)); 
      buffer.write(example); 
      buffer.flush(); 
      buffer.close(); 

      BufferedReader readFile= new BufferedReader(new FileReader(file1)); 
      String get_text = ""; 
      String lines = null; 

      while ((lines = readFile.readLine()) != null){ 
       get_text += lines; // Gets each line 
      } 

      byte[] dec = get_text.getBytes(Charset.forName("UTF-8"); 
      Log.e("TEXT", get_text); 
      Log.e("BYTES FROM TEXT", Arrays.toString(dec)); 
     } else { 
      System.out.println("File Already Exist"); 
     } 
    } catch(Exception e) { 
     e.getCause(); 
    } 
} catch(Exception e){ 
    e.getMessage(); 
} 

我的輸出與file1更換file

TEXT Yyyyyyy 
BYTES FROM TEXT [89, 121, 121, 121, 121, 121, 121] 
TEXT Yyyyyyy 
BYTES FROM TEXT [89, 121, 121, 121, 121, 121, 121] 
+0

它適用於正常的字符串,但是當我嘗試加密的郵件它不起作用,但它在我的電腦上工作 – kobbycoder

0

在你的代碼的主要錯誤是,你misuing字符串作爲字節數組。 如果你正在寫字符串,使用Writer直接寫它們。

然後你就可以刪除無用的轉換如下所示:

byte[] dec = get_text.getBytes(Charset.forName("UTF-8"); 

這將一個String轉換爲字符串的byte [],然後再回來。

包含: 如果您想要指定保存String的字符集,請使用String.getBytes("UTF-8"),然後以byte []形式將結果寫入OutputStream。

或者你可以寫字符串使用和構造OutputStreamWriter(OutputStream out, String charsetName)

類似的規則適用於讀取文件時,直接字符集感知。

+0

我也嘗試過不使用Charset.forName(「UTF-8」) – kobbycoder

相關問題