我构建了一个将数据插入文件并保存在内部存储器中的应用程序,我使用MediaScannerConnection类在将移动设备连接到PC时可以看到系统中的文件但是如果我删除了任何文件,它就不会对移动设备产生影响立即
这是我的代码:
package com.example.uhf.activity;
import android.app.Activity;
import android.media.MediaScannerConnection;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.uhf.R;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;
public class Main3Activity extends Activity {
ArrayList<String> sel=new ArrayList<String>();
ArrayList<String> arrayList=new ArrayList<String>();
Button button,mergeandexport;
File myExternalFile;
private String filepath = "Folder";
ArrayList<String> FilesInFolder ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
button=(Button)findViewById(R.id.button);
mergeandexport=(Button)findViewById(R.id.mergeandexport);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
ListView list=(ListView)findViewById(R.id.listview);
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
FilesInFolder = GetFiles("/sdcard/Folder");
ArrayAdapter<String> aa=new ArrayAdapter<String> (this,R.layout.rowlayout,R.id.checked,FilesInFolder.toArray(new String[0]));
list.setAdapter(aa);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String string = ((TextView) view).getText().toString();
if(sel.contains(string)){
sel.remove(string);
}
else {
sel.add(string);
}
}
});
mergeandexport.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
marged();
}
});
}
public ArrayList<String> GetFiles(String DirectoryPath) {
ArrayList<String> MyFiles = new ArrayList<String>();
File f = new File(DirectoryPath);
//f.mkdirs();
File[] files = f.listFiles();
if (files.length == 0)
return null;
else {
for (int i=files.length-1; i>=0; i--)
MyFiles.add(files[i].getName());
}
return MyFiles;
}
public void marged(){
try {
BufferedReader br=null;
String line;
for (int i=0;i<sel.size();i++){
br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("/sdcard/" + filepath,sel.get(i).toString()))));
while ((line = br.readLine()) != null) {
arrayList.add(line);
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
if(arrayList.size()==0){
Toast.makeText(this,"Choose more than one files",Toast.LENGTH_SHORT).show();
}
else if(arrayList.size()==1){
Toast.makeText(this,"Choose more than one files",Toast.LENGTH_SHORT).show();
}
else {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yy HH-mm-ss");
String filename = formatter.format(Calendar.getInstance().getTime()).replace(" ", "_") + ".txt";
myExternalFile = new File("/sdcard/" + filepath, "Merged " + filename);
try {
// add elements to al, including duplicates
Set<String> hs = new HashSet<String>();
hs.addAll(arrayList);
arrayList.clear();
arrayList.addAll(hs);
FileOutputStream fos = new FileOutputStream(myExternalFile);
MediaScannerConnection.scanFile(this, new String[] {myExternalFile.toString()}, null, null);
for (int i = 0; i < arrayList.size(); i++) {
String extra = arrayList.get(i) + "\n";
fos.write(extra.getBytes());
}
fos.close();
} catch (IOException e) {
e.printStackTrace();
}``
Toast.makeText(this, "File is saved in "+filepath, Toast.LENGTH_LONG).show();
}
}
}