editing a value in the file p2p_supplicant.conf which is located on /root/data/misc/wifi/p2p_supplicant.conf

走远了吗. 提交于 2019-12-02 17:57:47

问题


I am trying to develop a function for editing a value in the root file p2p_supplicant.conf which is located on /root/data/misc/wifi/p2p_supplicant.conf

The toast message always showing "File Not Found" my code is:

   private static final String FILE_PATH = "/root/data/misc/wifi/p2p_supplicant.conf";
   private static final String MARKER_LINE = "p2p_oper_channel=";
   private static final String TEXT_TO_ADD = "11";

public void changeConfig() {

     String message = String.format("Entering Config Class");
     Toast.makeText(getApplicationContext(), message,Toast.LENGTH_LONG).show();

          List<String> fileLines = new ArrayList<String>();
          Scanner scanner = null;
          try {
             scanner = new Scanner(new File(FILE_PATH));
             while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                fileLines.add(line);
                if (line.trim().equalsIgnoreCase(MARKER_LINE)) {
                   fileLines.add(TEXT_TO_ADD);

                     String message2 = String.format("File Written");
                     Toast.makeText(getApplicationContext(), message2,Toast.LENGTH_LONG).show();
                }
             }

          } catch (FileNotFoundException e) {
             e.printStackTrace();
             String message1 = String.format("File Not found");
             Toast.makeText(getApplicationContext(), message1,Toast.LENGTH_LONG).show();
          } finally {
             if (scanner != null) {
                scanner.close();
             }
          }

          PrintWriter pw = null;
          try {
             pw = new PrintWriter(new File(FILE_PATH));
             for (String line : fileLines) {
                pw.println(line);
             }
          } catch (FileNotFoundException e) {
             e.printStackTrace();
          } finally {
             if (pw != null) {
                pw.close();
             }
          }
        }

But the code did not find the location/path of the file. Please suggest. N.B. My phone is rooted.


回答1:


Basically, you are reading the file, changing the channel then rewriting the whole file. I am looking for a solution where you read the file first, edit it then write it back. Once I resolve that issue I will edit my answer here. Note before testing it, make a backup file for your wpa_supplicant.conf file in case errors happen.

Step 1: reading the file = check this solution: Executing a Process in Android to read a file

Step 2: looping over the String containing the text of the file and changing the operating channel and saving the the whole text in String text

Step 3: writing text into the the file

    Process p; 
            try { 
               // Preform su to get root privileges
               p = Runtime.getRuntime().exec("su"); 

               // Attempt to write a file to a root-only 
               DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
               os.writeBytes("echo \""+text+"\" > /data/misc/wifi/p2p_supplicant.conf\n");
               // Close the terminal
               os.writeBytes("exit\n"); 
               os.flush(); 
               try { 
                  p.waitFor(); 
                       if (p.exitValue() != 255) { 
                          // TODO Code to run on success
                       } 
                       else { 
                           // TODO Code to run on unsuccessful
                       } 
               } catch (InterruptedException e) { 
                  // TODO Code to run in interrupted exception
               } 
            } catch (IOException e) { 
               // TODO Code to run in input/output exception
            }


来源:https://stackoverflow.com/questions/29795510/editing-a-value-in-the-file-p2p-supplicant-conf-which-is-located-on-root-data-m

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!