【问题标题】:Writing a file to sdcard将文件写入 sdcard
【发布时间】:2011-01-28 03:30:28
【问题描述】:

我正在尝试将 Http 帖子回复中的文件写入 sdcard 上的文件。在检索到数据的字节数组之前,一切正常。

我尝试在清单中设置WRITE_EXTERNAL_STORAGE 权限 并尝试了我在网上找到的许多不同的教程组合。

我能找到的只是使用活动的openFileOutput("",MODE_WORLD_READABLE) 方法,但我的应用程序写入文件的方式是使用线程。具体来说,当必须写入文件时,从另一个线程调用一个线程, 所以即使我试过了,给一个活动对象也没有用。

该应用已经走了很长一段路,我无法更改该应用当前的编写方式。

拜托,有人帮帮我吗?


代码

File file = new File(bgdmanip.savLocation);
FileOutputStream filecon = null;
filecon = new FileOutputStream(file);

byte[] myByte;
myByte = Base64Coder.decode(seReply);

bos.write(myByte);
filecon.write(myByte);
myvals = x * 11024;

bgdmanip.savLocation 保存整个文件路径。 seReply 是来自 HttpPost 响应的字符串回复。第二组代码循环引用x。文件已创建但仍为 0 字节。

【问题讨论】:

    标签: java android file file-io


    【解决方案1】:
    //------------------------------WRITING DATA TO THE FILE ---------------------------------      
    
    btnWriteSDFile.setOnClickListener(new OnClickListener() 
        {
        public void onClick(View v)
        {       
    
            try {
                File myFile = new File("/sdcard/mysdfile.txt");
                myFile.createNewFile();
                FileOutputStream fOut = new FileOutputStream(myFile);
                OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut);
                myOutWriter.append(txtData.getText());
                myOutWriter.close();
                fOut.close();
                Toast.makeText(v.getContext(),"Done writing SD 'mysdfile.txt'", Toast.LENGTH_SHORT).show();
                txtData.setText("");
            } 
            catch (Exception e) 
            {
                Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
            }
        }
    
    
        }); 
    
    //---------------------------READING DATA FROM THE FILE PLACED IN SDCARD-------------------//       
            btnReadSDFile.setOnClickListener(new OnClickListener()
            {
    
            public void onClick(View v) 
            {
    
            try {
    
                File myFile = new File("/sdcard/mysdfile.txt");
                FileInputStream fIn = new FileInputStream(myFile);
                BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
                String aDataRow = "";
                String aBuffer = "";
                while ((aDataRow = myReader.readLine()) != null) 
                {
                    aBuffer += aDataRow ;
                }
                txtData.setText(aBuffer);
                myReader.close();
                Toast.makeText(v.getContext(),"Done reading SD 'mysdfile.txt'",Toast.LENGTH_SHORT).show();
            } 
            catch (Exception e)
            {
                Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
            }
            }
            }); 
    

    除此之外,还要在 Android.Manifest 中写入此权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    【讨论】:

    • 这就是我们所说的程序员的观点
    • 这里不是edittext,我想传递两个字符串值并将它们存储在sdcard中的文件中。我怎样才能做到这一点?
    • @Alliswell 请点击此链接,希望您能得到解决方案stackoverflow.com/questions/9962896/…
    • @Alliswell 很高兴你得到了解决方案,现在欠我一顿午餐,哈哈哈。祝你好运
    【解决方案2】:

    openFileOutput() 方法将数据写入应用程序的私有数据区域(不是 SD 卡),因此这可能不是您想要的。您应该能够调用Environment.getExternalStorageDirectory() 来获取SD 卡的根路径并使用它来创建FileOutputStream。从那里,只需使用标准的 java.io 例程。

    【讨论】:

    • 感谢埃里希。我将完整路径作为字符串传递,例如 "/sdcard/filename.ext" 。该文件也已创建,但文件大小仍为 0 字节。我也无法在 Eclipse 中使用 DDMS 的推/拉文件控件。
    • 您可能需要发布一些文件编写代码来帮助诊断问题。不是一切,但至少是正在发生的事情的基础知识。另外,您是否在 LogCat 中看到任何消息?
    • Erich,我已经更新了代码。 LogCat 中不会创建有关文件操作的消息。我更改了很多次代码,但在某些代码中出现错误,但不记得是哪个代码给了我错误。
    • Erich,我也看不到 Eclipse DDMS 中的推拉按钮。这是关于为什么我无法写入文件的原因吗?我可以看到里面的 sdcard 和文件,但是上面提到的控制按钮是不可见的。
    【解决方案3】:

    这是一个示例:

    // Log used as debug
    File log = new File(Environment.getExternalStorageDirectory(), "Log.txt");
    try {
        out = new BufferedWriter(new FileWriter(log.getAbsolutePath(), false));
        out.write(new Date().toString());
        out.write(" : \n");
    } catch (Exception e) {
        Log.e(TAG, "Error opening Log.", e);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 2012-04-15
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      相关资源
      最近更新 更多