标签: java-io

File.mkdir()和mkdirs()正在创建文件而不是目录

我使用以下代码:

final File newFile = new File("/mnt/sdcard/test/");
newFile.mkdir(); // if I use mkdirs() result is the same
Run Code Online (Sandbox Code Playgroud)

它会创建一个空文件!为什么?

android java-io

8
推荐指数
2
解决办法
4万
查看次数

在Java中测试空的InputStream

你们如何测试一个空的InputStream?我知道InputStream旨在使用远程资源,因此在您实际读取它之前,您无法知道它是否存在.我不能使用read(),因为当前位置会改变并使用mark()并重置,这似乎是不合适的.

问题是,有时人们无法测试read()是否返回-1,因为如果你有一个流而某些第三方库使用它,你需要在发送它之前测试它是否为空.

通过空的InputStreams我的意思是这些 new ByteArrayInputStream(new byte[0])

java inputstream java-io

7
推荐指数
2
解决办法
2万
查看次数

现有文件的java.io.FileNotFoundException

我尝试打开文件时收到此错误:

java.io.FileNotFoundException: D:\Portable%20Programs\Android%20Development\workspace3\XXX-desktop\bin\World_X.fr (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.util.Scanner.<init>(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

该文件存在于目录中,但我仍然收到此错误.然而,当我复制相同的文件在Eclipse工作区项目src文件夹,没有这样的例外是返回(尽管这种方法也bin文件夹创建World_X.fr文件).

我实际上要做的是通过这个获取.jar文件的绝对位置:

fileLocation = new String(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath());
Run Code Online (Sandbox Code Playgroud)

然后我将"World_X.fr"附加到fileLocation字符串,但这不起作用.请帮助我这方面.

java filenotfoundexception java-io

7
推荐指数
3
解决办法
8011
查看次数

读取文件并写入包含UTF - 8(不同语言)字符的文件

我有一个文件,其中包含以下字符:"Joh 1:1ஆதியிலேஆதியிலேவாரதவாரததைதைதைஇருநஇருநஇருநததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுதது"""""""""""""""""""""""".

www.unicode.org/charts/PDF/U0B80.pdf

当我使用以下代码时:

bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, "UTF8"));
Run Code Online (Sandbox Code Playgroud)

输出是框和其他奇怪的字符,如下所示:

"P = O֛; <一条Yՠ;"

有人可以帮忙吗?

这些是完整的代码:

File f=new File("E:\\bible.docx");
        Reader decoded=new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8);
        bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, StandardCharsets.UTF_8));
        char[] buffer = new char[1024];
        int n;
        StringBuilder build=new StringBuilder();
        while(true){
            n=decoded.read(buffer);
            if(n<0){break;}
            build.append(buffer,0,n);
            bufferedWriter.write(buffer);
        }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

StringBuilder值显示UTF字符,但在窗口中显示时,它显示为框.

找到问题的答案!!! 编码是正确的(即UTF-8)Java将文件读取为UTF-8,字符串字符为UTF-8,问题是在netbeans的输出面板中没有字体显示它.更改输出面板的字体(Netbeans-> tools-> options-> misc-> output选项卡)后,我得到了预期的结果.当它在JTextArea中显示时(需要更改字体),同样适用.但我们无法更改windows'cmd提示字体.

java java-io

7
推荐指数
1
解决办法
2917
查看次数

为什么Files.exists(...)和Files.notExists(...)?

拥有这两种方法的IMO是多余的,真的不清楚!我不太明白为什么这两种方法都是在Files API中设计的?

如果文件确实存在,Files.exist(..)返回true,如果不存在或没有权限则返回false.那么为什么在地狱里有一个Files.notExist(..)??

Oracle Docs说!Files.exists(...)不等同于Files.notExists(...)!? 也许有些东西让我无法理解!

当存在exists()方法时,使用notExist()有什么好处?

java api java-api java-io

7
推荐指数
1
解决办法
2637
查看次数

Java deleteOnExit和addShutdownHook - 哪个先来?

我有一些临时文件,我打电话deleteOnExit()给.我也有一个可以运行的runnable,addShutdownHook()可以在System.exit调用时运行.

我的关机挂钩运行时是否保证临时文件仍然可用?

java shutdown-hook java-io

7
推荐指数
1
解决办法
311
查看次数

Properties.load会关闭InputStream吗?

我看到了这个例子,但我没有看到close()在 上调用的方法InputStream,所以会prop.load()自动关闭流吗?或者示例中存在错误?

java properties inputstream java-io

7
推荐指数
1
解决办法
4134
查看次数

在 spring-boot 中从 jar 中读取文件

我正在使用 Spring boot 2.0.4,尝试读取放置在 resources/ 目录中的 json 文件,但收到“FileNotFoundException”。

我已经从 Stackoverflow 和其他链接引用了很多页面,但到目前为止还没有成功。

以下是堆栈跟踪片段,我不确定为什么会有“!” 在类路径中:

/opt/springboot/myProject.jar!/BOOT-INF/classes!/schema/jsonValidationSchema.json at o.s.u.ResourceUtils.getFile(ResourceUtils.java:217) at o.s.u.ResourceUtils.getFile(ResourceUtils.java:180)
Run Code Online (Sandbox Code Playgroud)

这是代码片段:

        InputStream in = new ClassPathResource("jsonValidationSchema.json").getInputStream();
        JsonNode schemaJsonNode = JsonLoader.fromReader(new InputStreamReader(in, "UTF-8"));
        JsonSchema schemaNode = ValidationUtils.getSchemaNode(schemaJsonNode);
Run Code Online (Sandbox Code Playgroud)

参考:

jar 内的文件对于 spring 不可见

从 Spring Boot 中的资源文件夹中读取文件

https://smarterco.de/java-load-file-from-classpath-in-spring-boot/

java.io.FileNotFoundException:无法打开类路径资源,因为它不存在

java.io.FileNotFoundException:类路径资源

spring java-io spring-boot

7
推荐指数
0
解决办法
1万
查看次数

File.listFiles() 在 android 11 中返回 null

我正在创建一个应用程序来测试File.listFiles()方法是否有效。为了检查这一点,我创建了一个应用程序并在那里使用了它,但是返回 null 代替了数组。这是我的完整代码请帮忙,我已授予 android 11 的所有权限

MainActivity.java

package com.rajkumarcreations.file;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

import java.io.File;

import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.os.Build.VERSION.SDK_INT;

public class MainActivity extends AppCompatActivity {
TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.btn);
        if(!checkPermission()){
            requestPermission();
        }else{
            File file = new File(Environment.getExternalStorageDirectory()+"/Download/");
            File[] allfiles …
Run Code Online (Sandbox Code Playgroud)

java android java-io android-11

7
推荐指数
2
解决办法
4853
查看次数

仅使用 Java.IO 从文件读取/写入字节

在 Java 中,我们如何将字节数组写入文件(并从该文件中读回)?

是的,我们都知道已经有很多这样的问题,但由于完成这项任务的方法有很多,所以它们变得非常混乱和主观。

因此,让我们缩小问题的范围:

领域:

  • 安卓/Java

我们想要什么:

  • 快(尽可能)
  • 无错误(以严格细致的方式)

我们没有做什么:

  • 第三方库
  • 任何需要 Android API 23 以上的库 (Marshmallow)

(因此,这排除了Apache CommonsGoogle GuavaJava.nio,并给我们留下了很好的 ol' Java.io

我们需要的:

  • 经过先写后读的过程后,字节数组始终完全相同(内容和大小)
  • Write方法只需要两个参数:File文件和byte[]数据
  • Read方法返回一个byte[]并且只需要一个参数:File file

在我的特定情况下,这些方法是私有的(不是库),并且不负责以下内容,(但如果您想创建适用于更广泛受众的更通用的解决方案,那就去做吧):

  • 线程安全(文件不会同时被多个进程访问)
  • 文件为空
  • 文件指向不存在的位置
  • 文件位置缺乏权限
  • 字节数组太大
  • 字节数组为空
  • 处理任何“索引”、“长度”或“附加”参数/功能

所以......我们正在寻找最终的防弹代码,未来的人们可以认为可以安全使用,因为你的答案有很多赞成票,并且没有评论说,“这可能会崩溃如果...”

这是我到目前为止所拥有的:

将字节写入文件:

private void writeBytesToFile(final File file, final byte[] data) {
        try {
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(data);
            fos.close();
        } catch (Exception e) {
            Log.i("XXX", "BUG: " + e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

从文件中读取字节: …

java arrays android file java-io

7
推荐指数
1
解决办法
1842
查看次数