【问题标题】:Save a file on internal storage在内部存储中保存文件
【发布时间】:2016-09-08 08:24:03
【问题描述】:

我很难将文件保存到内部存储中。下面是我保存到外部存储的代码,但我不知道将文件保存到内部存储的正确方法。我是编码新手。谁能帮我解决这个问题。`

public class Semester extends AppCompatActivity {

  Button btnSem;
  ListView lvFiles;
  private ArrayAdapter arrayAdapter;
  private ArrayList < String > files_on_server = new ArrayList < > ();
  private Handler handler;
  private String selected_file;
  private ProgressDialog progressDialog;

  @
  Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_semester);
    btnSem = (Button) findViewById(R.id.btnSem);
    lvFiles = (ListView) findViewById(R.id.lvFiles);

    initialize();

  }

  private void initialize() {

    arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, files_on_server);
    lvFiles.setAdapter(arrayAdapter);
    handler = new Handler();
    progressDialog = new ProgressDialog(this);
    progressDialog.setTitle("Downloading...");
    progressDialog.setMax(100);
    progressDialog.setCancelable(false);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);


    btnSem.setOnClickListener(new View.OnClickListener() {@
      Override
      public void onClick(View view) {
        Thread t = new Thread(new Runnable() {@
          Override
          public void run() {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url("http:/192.168.0.102/client/index.php?list_files").build();
            Response response = null;
            try {
              response = client.newCall(request).execute();
              JSONArray array = new JSONArray(response.body().string());

              for (int i = 0; i < array.length(); i++) {
                String file_name = array.getString(i);
                if (files_on_server.indexOf(file_name) == -1)
                  files_on_server.add(file_name);
              }
              handler.post(new Runnable() {@
                Override
                public void run() {
                  arrayAdapter.notifyDataSetChanged();
                }
              });


            } catch (IOException e) {
              e.printStackTrace();
            } catch (JSONException e) {
              e.printStackTrace();
            }
          }
        });
        t.start();
      }

    });
    lvFiles.setOnItemClickListener(new AdapterView.OnItemClickListener() {@
      Override
      public void onItemClick(AdapterView <? > adapterView, View view, int i, long l) {
        selected_file = ((TextView) view).getText().toString();

        Thread t = new Thread(new Runnable() {@
          Override
          public void run() {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url("192.168.0.102/client/" + selected_file).build();

            Response response = null;
            try {
              response = client.newCall(request).execute();
              float file_size = response.body().contentLength();

              BufferedInputStream inputStream = new BufferedInputStream(response.body().byteStream());
              OutputStream stream = new FileOutputStream(Environment.getRootDirectory() + "/files" + selected_file);
              byte[] data = new byte[8192];
              float total = 0;
              int read_bytes = 0;

              handler.post(new Runnable() {@
                Override
                public void run() {
                  progressDialog.show();
                }
              });

              while ((read_bytes = inputStream.read(data)) != -1) {
                total = total + read_bytes;
                stream.write(data, 0, read_bytes);
                progressDialog.setProgress((int)(total / file_size) * 100);

              }
              progressDialog.dismiss();
              stream.flush();
              stream.close();
              response.body().close();


            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        });
      }
    });

  }



}

`

【问题讨论】:

    标签: java android storage


    【解决方案1】:

    【讨论】:

    • 你能建议我在上面的代码中可以做什么吗? #科班
    【解决方案2】:
    OutputStream stream = new FileOutputStream(Environment.getRootDirectory() + "/files" + selected_file);
    

    在上面的行中,您应该使用Environment.getRootDirectory()getFilesDir() instad 来存储在您的应用程序内部目录中。

    您也可以使用openFileOutput(name, mode)MODE_PRIVATE 直接创建FileOutputStream

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 2023-03-14
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多