我的应用程序正在运行。 如果它们不存在,我需要在SDCard中创建XML文件和目录。
我使用此代码从Assets
获取XML文件public Document abrirArchivo()
{
Document internalDom = null;
//Cargo el archivo xml en una variable Document
try
{
AssetManager assManager = context.getAssets();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
internalDom = dBuilder.parse(assManager.open("gastos.xml"));
}
catch (Exception e) {
e.printStackTrace();
}
return internalDom;
}
然后将此文档保存到SdCard中的文件
public void crearArchivo(){
String pathDirectorio=android.os.Environment.getExternalStorageDirectory().toString()+"/AdministradorGastos/";
File directorio= new File(pathDirectorio);
File archivoExiste= new File(path);
directorio.mkdirs();
if(!archivoExiste.exists())
{
Document dom= abrirArchivo();
try
{
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult streamResult = new StreamResult(new File(pathDirectorio+"gastos.xml"));
DOMSource source = new DOMSource(dom);
transformer.transform(source, streamResult);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
问题是我在SDCard中获取一个空的xml文件,而我在Assets中的XML文件是这样的:
<?xml version="1.0"?>
<gastos>
<gasto>
<descripcion>Default</descripcion>
<monto>0</monto>
<fecha>01/01/1900</fecha>
</gasto>
</gastos>
答案 0 :(得分:1)
检查您的AndroidManifest文件是否有必要的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
将此放置在应用程序标记内。我的代码中没有看到任何其他错误。
答案 1 :(得分:0)
而不是创建文件将文件从资产复制到SD卡。检查以下代码
private void CopyAssets() {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("Files");
} catch (IOException e) {
Log.e("tag", e.getMessage());
}
for(String filename : files) {
System.out.println("File name => "+filename);
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("Files/"+filename); // if files resides inside the "Files" directory itself
out = new FileOutputStream(Environment.getExternalStorageDirectory().toString() +"/" + filename);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch(Exception e) {
Log.e("tag", e.getMessage());
}
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
使用以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />