Articles of 文件 io

如何将文件保存到SD卡

我是android和java编程的新手,有人可以告诉我如何保存文件,我有以下代码: InputStream is = new FileInputStream( location + “/zipSample.zip”); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is)); try { ZipEntry ze; while ((ze = zis.getNextEntry()) != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count; while ((count = zis.read(buffer)) != -1) { baos.write(buffer, 0, count); } String filename = ze.getName(); byte[] bytes […]

如何将Map转换为Bytes并保存到内部存储

如何将Map<Integer, String >转换为byte[] ,然后将其写入内部存储? 我目前有: try { FileOutputStream fos = context.openFileOutput(Const.FILE_CATEGORIES, Context.MODE_PRIVATE); fos.write(null); } catch (FileNotFoundException e) { // reload and create the file again } 但是..我不知道如何将Map转换成正确的格式,然后在我需要再次加载它时将其解码回原始格式。 我需要每周重新创建一次此文件,并在应用程序启动时加载它。

如何在SDCARD目录中创建文件

我想在SDCARD中的目录(未创建)中创建一个文件(未创建)。 怎么做? 谢谢。

从外部存储Android中读取图像/文件

我正在尝试从外部存储加载图像。 我设置权限,我尝试了不同的方式,但没有一个工作。 BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.ARGB_8888; Bitmap bitmap = BitmapFactory.decodeFile(file.toString()); tv.setImageBitmap(bitmap); 和这个, FileInputStream streamIn = new FileInputStream(file); Bitmap bitmap = BitmapFactory.decodeStream(streamIn); tv.setImageBitmap(bitmap); streamIn.close();

Java中的内存映射zip文件

这是我试图解决的问题: 我有大约100个二进制文件(总共158KB,它们的大小大致相同+/- 50%)。 我需要有选择地只解析这些文件中的一些(在最坏的情况下可能是50,在其他情况下只有1到5)。 顺便说一句,这是在Android设备上。 在Java中执行此操作的最快方法是什么? 一种方法是将所有内容组合到一个文件中,然后使用文件搜索来获取每个单独的文件。 这样文件打开只需要调用一次,这通常很慢。 但是,为了知道每个文件的位置,需要在文件的开头有某种表 – 可以使用脚本生成 – 但是文件也需要在表中的索引中命令它们被连接起来,因此文件搜索不需要做太多工作(如果我错了,请纠正我)。 更好的方法是使文件内存映射,然后表不必按顺序排序,因为内存映射文件将具有随机访问(如果我错了,再次纠正我)。 如果使用zip压缩,则创建该表将是不必要的,因为zip压缩已经创建了一个表。 此外,所有文件都不必连接。 我可以压缩目录,然后通过zip文件中的条目访问每个单独的文件。 问题解决了。 除非zip文件没有内存映射,否则读取速度会慢一些,因为系统调用比直接内存访问慢(如果我错了,请纠正我)。 所以我得出结论,最好的解决方案是使用内存映射的zip存档。 但是, ZipFile条目返回一个InputStream来读取条目的内容。 并且MappedByteBuffer需要一个RandomAccessFile ,它将文件名作为输入,而不是InputStream 。 无论如何,内存映射一个zip文件快速读取? 或者是否有一个不同的解决方案来解决这个选择的文件? 谢谢 编辑:我测试了文件的打开,关闭和解析速度这里是我发现的统计数据: Number of Files: 25 (24 for parse because garbage collection interrupted timing) Total Open Time: 72ms Total Close Time: 1ms Total Parse Time: 515ms (这有点偏向Parse,因为Parse缺少一个文件) %Total […]

file.exists()在文件存在时返回false

在我正在处理的Android应用程序中,用户应该能够在SD卡上创建一个新的CSV文件,使用他们在EditText中输入的文本命名。 问题是在使用目录和文件名实例化File之后,file.exists()返回false ,即使该文件确实存在于该位置。 我使用Android文件浏览器和Windows资源管理器浏览了SD卡,文件确实存在。 这是检查文件是否已经存在的正确方法,如果是,我错过了什么,以便在它存在时返回true? String csvname = edittext.getText().toString() + “.csv”; File sdCard = Environment.getExternalStorageDirectory(); //path returns “/mnt/sdcard” File dir = new File (sdCard.getAbsolutePath() + “/Android/data/” + getPackageName() + “/files/”); // path returns “/mnt/sdcard/Android/data/com.phx.license/files” dir.mkdirs(); File file = new File(dir, csvname); //path returns “/mnt/sdcard/Android/data/com.phx.license/files/Test.csv” if(!file.exists()) //WHY DOES IT SAY IT DOESN’T EXIST WHEN IT DOES? […]

从目录中删除超过给定时间的文件

我已经创建了一些文件列表,用于在我的应用程序中打开一次后存储一些属性。 每次打开文件时,这些属性都会更改,因此我将其删除并再次创建。 我已经使用创建了所有文件文件 File file =new File(getExternalFilesDir(null), currentFileId+””); if(file.exists()){ //I store the required attributes here and delete them file.delete(); }else{ file.createNewFile(); } 我想在这里删除所有这些文件超过一周,因为这些存储的属性将不再需要。 这样做的适当方法是什么?

从文件中快速读取小端整数

我需要将一个由4字节整数(小端)组成的二进制文件读入我的Android应用程序的2D数组中。 我目前的解决方案如下: DataInputStream inp = null; try { inp = new DataInputStream(new BufferedInputStream(new FileInputStream(procData), 32768)); } catch (FileNotFoundException e) { Log.e(TAG, “File not found”); } int[][] test_data = new int[SIZE_X][SIZE_Y]; byte[] buffer = new byte[4]; ByteBuffer byteBuffer = ByteBuffer.allocate(4); for (int i=0; i < SIZE_Y; i++) { for (int j=0; j < SIZE_X; j++) { […]

在外部存储上创建新文件时权限被拒绝

我需要将文件从资产复制到外部存储。 这是我的代码: File f = new File(Environment.getExternalStorageDirectory() + File.separator + “MyApp” + File.separator + “tessdata” + File.separator + “eng.traineddata”); if (!f.exists()) { AssetManager assetManager = getAssets(); try { f.createNewFile(); InputStream in = assetManager.open(“eng.traineddata”); OutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator + “MyApp” + File.separator + “tessdata” + File.separator + “eng.traineddata”); byte[] buffer = new byte[1024]; […]

Android:FileOutputStream和FileWriter之间的区别

我想知道Android的FileOutputStream和FileWriter类之间的确切区别。 什么时候最适合使用每一个?