sd卡的读写操作 HttpURLConnection HttpURLConnection是基于[http协议的,支持GET、POST、PUT、DELETE等各种请求方式。如果使用HTTPS协议请求,可以使用它的子类HttpsURLConnection完成更安全的请求操作
使用步骤
创建一个URL对象:
调用URL对象的openConnection()来获取HttpURLConnection对象实例;
1 HttpURLConnection connection= (HttpURLConnection) url.openConnection();
设置HTTP请求使用的方法:GET、POST或其他请求;
1 connection.setRequestMethod(“GET”);
设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头;
1 2 3 connection.setConnectTimeout(6*1000); connection.setReadTimeout(6 * 1000);
调用getInputStream()方法获得服务器返回的输入流,然后输入流进行读取了;
InputStream in = connection.getInputStream();
最后调用disconnect()方法将HTTP连接关掉;
connection.disconnect();
使用参数 setRequestProperty(key,value)【设置请求头】:设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法
addRequestProperty(key,value)【设置响应体】:添加由键值对指定的一般请求属性
getOutputStream【发送URL请求】:建立实际连接之后,就是发送请求,把请求参数传到服务器
使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 public void testDoGet(){ String api=""; HttpURLConnection connection = null; InputStream in=null; BufferedReader reader=null; try{ //构造一个URL对象 URL url = new URL(api); //获取URLConnection对象 connection= (HttpURLConnection) url.openConnection(); in = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); StringBuilder sb = new StringBuilder(); String line = null; //按行读取 while ((line = reader.readLine()) != null) { sb.append(line); } String response= sb.toString(); System.out.println(response); }catch (Exception exception){ exception.printStackTrace(); }finally { if (connection != null) { connection.disconnect(); } if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } }
AsyncTask异步操作 AsyncTask<Void, Void, Void> 参数:
异步任务开始时 , execute() 方法传入的参数类型 , 也是 doInBackground() 方法传入的参数类型 ;
异步任务执行时 , 进度值类型 , onProgressUpdate() 方法传入的参数类型 ;
异步任务结束时 , 结果类型 , onPostExecute() 方法传入参数类型 , 或 onCancelled() 方法参数
使用步骤 自定义 AsyncTask 异步任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package kim.hsl.aa; import android.os.AsyncTask; public class MyAsyncTask extends AsyncTask<String, Integer, Boolean> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Boolean doInBackground(String... strings) { return null; } @Override protected void onProgressUpdate(Integer... values) { // 在 doInBackground 中调用了 publishProgress 方法, 就会回调该方法 super.onProgressUpdate(values); @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onCancelled(Boolean aBoolean) { super.onCancelled(aBoolean); } }
调用异步任务
1 2 3 4 5 6 7 8 9 10 11 12 13 public class MainActivity extends AppCompatActivity { private MyAsyncTask mMyAsyncTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建并执行异步任务 mMyAsyncTask = new MyAsyncTask(); mMyAsyncTask.execute(); } }
sd卡的读写 在SD卡目录下创建文件
1 2 3 4 5 6 7 8 File file = new File(Environment.getExternalStorageDirectory(), "mysdcard.txt"); Log.d(TAG, "file.exists():" + file.exists() + " file.getAbsolutePath():"+ file.getAbsolutePath()); if (file.exists()) { file.delete(); file.createNewFile(); } // Toast.makeText(MainActivity.this, "SD卡目录下创建文件成功...", Toast.LENGTH_LONG).show(); Log.d(TAG, "SD卡目录下创建文件成功...");
在SD卡目录下的文件,写入内容
1 2 3 4 5 FileWriter fw = new FileWriter(file); fw.write("我的sdcard内容....."); fw.close(); // Toast.makeText(MainActivity.this, "SD卡写入内容完成...",Toast.LENGTH_LONG).show(); Log.d(TAG, "SD卡写入内容完成...");
读取SD卡文件里面的内容
1 2 3 4 FileReader fr = new FileReader("/mnt/sdcard/mysdcard.txt"); BufferedReader r = new BufferedReader(fr); String result = r.readLine(); Log.d(TAG, "SD卡文件里面的内容:" + result);