jsonObject.toString():需要處理的json對象轉成的字符串
"/testData/ExtractKWByOnce.txt":寫入hdfs中的目標路徑
try { Configuration configuration=new Configuration(); InputStream inputStream=new BufferedInputStream( new ByteArrayInputStream(jsonObject.toString().getBytes("")) );//打開一個BufferedInputStream字節輸入流 FileSystem fs=FileSystem.get(URI.create("hdfs://localtion:8020"),configuration);
//這里是creat()方法表示新創建一個文件,如果想在一個文件上追加,請用append()方法。 FSDataOutputStream fsDataOutputStream=fs.create(new Path("/testData/ExtractKWByOnce.txt")); IOUtils.copyBytes(inputStream,fsDataOutputStream,1024,true); fsDataOutputStream.close(); fs.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); }
用此方法可能會出現 中文亂碼問題,hdfs上的文件和自己期待存入的內容有差異。
可以在 jsonObject.toString().getBytes("") 處將我們的編碼格式指定為:
jsonObject.toString().getBytes("GBK")
基本可以解決問題
----------------------------------------------------------------------------------------------------------------------------
今日發現,在GBK編碼下,從瀏覽器直接打開hdfs文件不會出現亂碼,但是在shell終端通過#>hdfs dfs -cat xxx 命令打開的hdfs文件出現了亂碼問題。
將編碼改回UTF-8,從瀏覽器直接打開hdfs文件會出現亂碼,但是在shell終端通過#>hdfs dfs -cat xxx 命令打開的hdfs文件不出現亂碼。
所以具體選擇哪種編碼,要看實際需求。