Android解决读取txt文件中文乱码问题,reload和cnvert区别,按行读取txt文件,按 |进行字符串分割
16lz
2021-01-26
目录
Android中文乱码
reload和cnvert区别
按行读取txt文件,按"|"进行字符串分割,标红的地方时 关键代码。很简单
Android中文乱码
reload和cnvert区别
在你所在的activity中设置编码格式,一般采用utf,有的采用gbk数据一般是别人下发数据你进行接收,那么就必须采用gbk进行格式转化;
上图中reload是你当前视图中看到的代码格式转换;
cnvert是将你跑应用时应用中文字显示的格式;
还有一种万能手法:
在build.gradle中添加 在android 目录中:compileOptions.encoding = "GBK”
按行读取txt文件,按"|"进行字符串分割,标红的地方时 关键代码。很简单
public class MainActivity extends AppCompatActivity { private static final String TAG = "mainactivity"; Button button; Button buttonScanner; String fileName_xls_string = "/sdcard/import_inventory_data.xls"; String fileName_TXT_string = "/sdcard/import_inventory_data.TXT"; @BindView(R.id.im_11) ImageView im11; @BindView(R.id.im_12) ImageView im12; @BindView(R.id.im_13) ImageView im13; @BindView(R.id.im_21) ImageView im21; @BindView(R.id.im_22) ImageView im22; @BindView(R.id.im_23) ImageView im23; @BindView(R.id.im_31) ImageView im31; List data_news; private Object usb; TextView textView; @TargetApi(Build.VERSION_CODES.LOLLIPOP) @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this);// updateApks(); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } textView=(TextView) findViewById(R.id.tv_version); textView.setText("当前版本: "+Tools.getVersion(this)+""); InitData(); IntentFilter filter = new IntentFilter(); filter.addAction("com.android.server.scannerservice.broadcast"); this.registerReceiver(mResultReceiver, filter); requestPermissions(); UpdateManager updateManager=new UpdateManager(MainActivity.this,"http://121.41.117.1:98/pcheck/version_pcheck.xml"); updateManager.checkUpdate();// getUsb(); } private void InitData() { //数据查询 data_news = DBManager.getInstance(MainActivity.this).queryUserList(); } //文件读取 execel格式 public List ReadExecelTwo(String strFilePath) throws IOException, BiffException { List gate_list = new ArrayList<>(); Sheet sheet; Workbook book; //Q1G_Path为要读取的excel文件完全路径名 book = Workbook.getWorkbook(new File(strFilePath)); //获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1,2,3,....) sheet = book.getSheet(0); for (int i = 2; i < sheet.getRows(); i++) { //列对应Date对象标记-1 data_new gate = new data_new(); gate.setID(i - 1);//(列,行); gate.setNUMBERING(sheet.getCell(0, i).getContents());//(列,行); gate.setNAME(sheet.getCell(1, i).getContents()); gate.setCLASSIFICATION(sheet.getCell(2, i).getContents()); gate.setGETTING_METHOR(sheet.getCell(3, i).getContents()); gate.setSPECIFICATIONA(sheet.getCell(4, i).getContents()); gate.setCOUNTER(sheet.getCell(5, i).getContents()); gate.setGET_THE_DATA(sheet.getCell(6, i).getContents()); gate.setDATA_O_ENTRY(sheet.getCell(7, i).getContents()); gate.setVALUE_TYPE(sheet.getCell(8, i).getContents()); gate.setBOOK_AMOUNT(sheet.getCell(9, i).getContents()); gate.setVALUE_MONEY(sheet.getCell(10, i).getContents()); gate.setINVENTORY_AMOUNT(sheet.getCell(11, i).getContents()); gate.setINVENTORY_RESULT(sheet.getCell(12, i).getContents()); gate.setLOCATION(sheet.getCell(13, i).getContents()); gate.setUSER_OF_DEPARTMENT(sheet.getCell(14, i).getContents()); gate.setUSERS(sheet.getCell(15, i).getContents()); gate.setNOTE(sheet.getCell(16, i).getContents()); gate.setStatus("未盘"); gate_list.add(gate); } DBManager.getInstance(MainActivity.this).insertUserList(gate_list); /*数据导出完成弹框*/ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("提示"); builder.setMessage("数据导出完成"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "已经导出数据", Toast.LENGTH_SHORT).show(); } }); AlertDialog dialog = builder.create(); dialog.show(); return gate_list; } //文件读取2 txt格式 public List ReadTxTwo(String strFilePath) { List gate_list = new ArrayList<>(); String path = strFilePath; ArrayList newList = new ArrayList(); //打开文件 File file = new File(path); //如果path是传递过来的参数,可以做一个非目录的判断 if (file.isDirectory()) { Log.d("TestFile", "The File doesn't not exist isDirectory"); } else { try { InputStream instream = new FileInputStream(file); if (instream != null) { InputStreamReader inputreader = new InputStreamReader(instream); BufferedReader buffreader = new BufferedReader(inputreader); String line; String strLine; BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));//Android解决读取txt文件中文乱码问题, //分行读取 while ((line = reader.readLine()) != null) { newList.add(line + "\n"); //按行读取txt文件, } for (int i = 0; i < newList.size(); i++) { Log.d(TAG, "ReadTxtFile: " + newList.get(i)); String data = newList.get(i); String[] arr = data.split("\\|");//根据“ ”和“,”区分 //按"|"进行字符串分割,标 data_new gate = new data_new(); gate.setID(i - 1);//(列,行); gate.setNUMBERING(arr[0]);//(列,行); gate.setNAME(arr[1]); gate.setBOOK_AMOUNT(arr[2]); gate.setVALUE_MONEY(arr[3]); gate.setStatus("未盘"); gate_list.add(gate); } DBManager.getInstance(MainActivity.this).insertUserList(gate_list); /*数据导出完成弹框*/ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("提示"); builder.setMessage("数据导出完成"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "已经导出数据", Toast.LENGTH_SHORT).show(); } }); AlertDialog dialog = builder.create(); dialog.show(); instream.close(); } } catch (FileNotFoundException e) { Log.d("TestFile", "The File doesn't not exist FileNotFoundException"); } catch (IOException e) { Log.d("TestFile", e.getMessage()); } } return gate_list; } private BroadcastReceiver mResultReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals("com.android.server.scannerservice.broadcast")) { Log.d(TAG, "mResultReceiver scannerdata=" + intent.getStringExtra("scannerdata" + "1212121212121"));// textView.setText(getString(R.string.m_1111) + intent.getStringExtra("scannerdata")); } } }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } @OnClick({R.id.im_11, R.id.im_12, R.id.im_13, R.id.im_21, R.id.im_22, R.id.im_23, R.id.im_31}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.im_11://资产导入// UpdateManager updateManager=new UpdateManager(MainActivity.this,"http://121.41.117.1:98/pcheck/version_pcheck.xml");// updateManager.checkUpdate(); AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("提示"); builder.setMessage("点击确定导入数据"); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { File fileName_xls = new File(fileName_xls_string); File fileName_TXT = new File(fileName_TXT_string); if (fileName_xls.exists()&&fileName_TXT.exists()){ Toast.makeText(MainActivity.this, "目录中存在txt和xls导入文件,请删除不需导入文件", Toast.LENGTH_LONG).show(); }else { //根据文件类型读取文件 if (fileName_xls.exists()){ ReadExecelTwo(fileName_xls_string); } else if (fileName_TXT.exists()){ ReadTxTwo(fileName_TXT_string); } } } catch (IOException e) { e.printStackTrace(); } catch (BiffException e) { e.printStackTrace(); } } }); AlertDialog dialog = builder.create(); dialog.show(); break; case R.id.im_12://资产导出// SelfDialog.getInstanceYesAndNo// (MainActivity.this,"提示","确定导出数据","确定","取消")// .buildYesAndNoDialog(); AlertDialog.Builder builder12 = new AlertDialog.Builder(MainActivity.this); builder12.setTitle("提示"); builder12.setMessage("确定导出数据"); builder12.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); builder12.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //导出数据Excel调用 ExpportDataBeExcel expportDataBeExcel = new ExpportDataBeExcel(MainActivity.this); data_news = DBManager.getInstance(MainActivity.this).queryUserList(); expportDataBeExcel.exportData(data_news); } }); AlertDialog dialog12 = builder12.create(); dialog12.show(); break; case R.id.im_13://数据重置 AlertDialog.Builder builder13 = new AlertDialog.Builder(MainActivity.this); builder13.setTitle("提示"); builder13.setMessage("确定数据重置"); builder13.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { for (int i=0;i() { @Override public void accept(Permission permission) throws Exception { if (permission.granted) { // 用户已经同意该权限 Log.d(TAG, permission.name + " is granted."); } else if (permission.shouldShowRequestPermissionRationale) { // 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时。还会提示请求权限的对话框 Log.d(TAG, permission.name + " is denied. More info should be provided."); } else { // 用户拒绝了该权限,而且选中『不再询问』 Log.d(TAG, permission.name + " is denied."); } } }); } @Override protected void onDestroy() { super.onDestroy(); if (mResultReceiver != null) { this.unregisterReceiver(mResultReceiver); } } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public Object getUsb() { UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap deviceList = manager.getDeviceList(); Iterator deviceIterator = deviceList.values().iterator(); while(deviceIterator.hasNext()){ UsbDevice device = deviceIterator.next(); //your code Log.d(TAG, "getUsb: "+device.getDeviceName()+"/"+device.getManufacturerName()+"/"+device.getProductName()); } return usb; }}
更多相关文章
- 一句话锁定MySQL数据占用元凶
- Android(安卓)OpenGLES2.0(十一)——利用OpenGLES做Camera预览
- Android(安卓)NDK——使用Android(安卓)Studio引用so库,jar包、mo
- Android(安卓)CrashHandler编写自己的异常捕获类
- Android(安卓)分享 - 向其它 App 发送数据
- Android(安卓)客户端与服务器端进行数据交互(一、登录服务器端)
- Android的轻量级数据库sqlite、以及文件存取byte数组
- Android中数据库常见操作实例分析
- Androd 添加新键值