版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38998213/article/details/90519370
Android解决读取txt文件中文乱码问题,按行读取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_new> 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<data_new> 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<data_new> gate_list = new ArrayList<>(); String path = strFilePath; ArrayList<String> newList = new ArrayList<String>(); //打开文件 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<data_news.size();i++){ data_new dataNew=data_news.get(i); dataNew.setID(dataNew.getID()); dataNew.setINVENTORY_AMOUNT("0.00"); dataNew.setINVENTORY_RESULT(""); dataNew.setStatus("未盘"); DBManager.getInstance(MainActivity.this).updateUser_all(dataNew); } AlertDialog.Builder builder131 = new AlertDialog.Builder(MainActivity.this); builder131.setTitle("提示"); builder131.setMessage("数据重置完成"); builder131.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show(); } }); AlertDialog dialog131 = builder131.create(); dialog131.show(); } }); builder13.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); AlertDialog dialog13 = builder13.create(); dialog13.show(); break; case R.id.im_21://资产盘点 Intent intent21 = new Intent(MainActivity.this, ActivityPropertyCheckActivity.class); startActivity(intent21); // CustomDialog dialog1=new CustomDialog.Builder(MainActivity.this) // .view(R.layout.dialog_layout) // .addViewOnclick(R.id.btn_dialog_cancel, new View.OnClickListener() { // @Override // public void onClick(View v) { // Toast.makeText(MainActivity.this, "quxiao", Toast.LENGTH_SHORT).show(); // } // }) // .addViewOnclick(R.id.btn_dialog_go, new View.OnClickListener() { // @Override // public void onClick(View v) { // Toast.makeText(MainActivity.this, "quxiao", Toast.LENGTH_SHORT).show(); // } // }) // .build(); // //代码设置view属性 // TextView tv_title = dialog1.findView(R.id.txt_dialog_title); // TextView tips = dialog1.findView(R.id.txt_dialog_message); // TextView tv_update = dialog1.findView(R.id.btn_dialog_go); // tv_title.setText("辞职信"); // tips.setText("由于程序猿这行业是高危行业,所以我决定明天就向老板申请离职,毕竟世界那么大,我还想活着去看看"); // tv_update.setText("立即辞职"); // dialog1.show(); break; case R.id.im_22://资产查询 Intent intent22 = new Intent(MainActivity.this, AssertLookActivity.class); startActivity(intent22); break; case R.id.im_23://清查结果 Intent intent23 = new Intent(MainActivity.this, Result_look_TabLayoutActivity.class); startActivity(intent23); break; case R.id.im_31://退出系统 AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this); builder2.setTitle("提示"); builder2.setMessage("确定退出?"); builder2.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); builder2.setPositiveButton("退出", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { System.exit(0); } }); AlertDialog dialog2 = builder2.create(); dialog2.show(); break; } } private void requestPermissions() { RxPermissions rxPermission = new RxPermissions(this); rxPermission .requestEach( Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE // Manifest.permission.ACTION_USB_PERMISSION ) .subscribe(new Consumer<Permission>() { @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<String, UsbDevice> deviceList = manager.getDeviceList(); Iterator<UsbDevice> 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; } }