用Resource流读取文件

本文介绍了如何在不同操作系统上高效地读取文件内容的方法,包括使用Spring框架下的Resource类和IOUtils工具类来处理文件读取问题,并展示了如何解析CSV文件及Excel表格。

 些文件路径时尽量用File.separator进行分割,因为linux和windows系统中/和\格式不一样

使用SpringResource读取文件内容source为文件路径Ioutistomcate的包len返回读取到的实际长度。返回字符格式的数据

private byte[] abc(String source) throws IOException{

       Resource resource = new ClassPathResource(source);

       InputStream in = resource.getInputStream();

       int length = in.available();

       byte[] buffer = new byte[length];

       int len=IOUtils.read(in, buffer, 0, length);

       return buffer;

      

    }或者用下面的读取sourcePath直接用name/***引用

ClassLoader classLoader = getClass().getClassLoader();    

InputStream stream = classLoader.getResourceAsStream(sourcePath);

Scanner scanner = new Scanner(stream);    也可以用 String str= IOUtils.toString(stream, "UTF-8");直接读取

while (scanner.hasNextLine()) { String s = scanner.nextLine();        

String[] items = s.split(" +");    //csv文件一般用///t进行分割    

if (items.length != 2) { continue;         }

appsClassif.put(items[0], Arrays.asList(items[1].split(",")));     } }

也可以用

其中/product/.....为resource下面的文件夹

IOUtils为import org.apache.commons.io.IOUtils;
String dmRes = IOUtils.resourceToString("/product/" + productId+ "/skill-dm-" + skillId + ".json", Charset.forName("utf-8"));

byte[]集合对象转换为字符串对象,

Byte[] bytes=new byte[10]{‘a’,’b’,’c’}

String str=new String(bytes,1,3)bytes集合对象的第二和第三个取出来形成字符串对象

 

或者直接用下面的读取,.为当前目录路径,..为上级目录,/为绝对路径即为根目录skills目录为与src同级的目录:

String orifilePath = FileUtils.getFile("./skills/yw.txt").getAbsolutePath();
        File fileOri = new File(orifilePath);
        String strOri = FileUtils.readFileToString(file2);

读取xlsx(excel)时可以将excel复制到txt文件中然后用FileUtils获取里面的内容。

String orifilePath = FileUtils.getFile("./skills/yw.txt").getAbsolutePath();
        File fileOri = new File(orifilePath);

//FileUtils为apache.commons.io包中的类
        String strOri = FileUtils.readFileToString(fileOri);
        String[] split2 = strOri.split("\n");// 换行
        for(String s:split2){
            JSONArray itemArr = new JSONArray();
            s=s.replaceAll("\\r", "");
            String[] split3 = s.split("\t"); //获取到单个列
            itemArr.add(split3[0]);
            itemArr.add(Arrays.stream(split3).collect(Collectors.joining(",")));
            contentArr.add(itemArr);//将每一列放到jsonArray中。
        }

 

<think>好的,用户的问题是关于如何在Java中使用Resource对象来读取文件的示例代码。我需要先确认用户提到的Resource对象具体属于哪个框架或库,因为在Java中有多种资源处理方式。常见的可能是Spring框架的Resource接口,或者是Java标准库中的ResourceBundle,但ResourceBundle通常用于本地化资源,而不是文件读取。 首先,用户的问题中提到“Resource对象”,结合常见的Java开发场景,很可能是指Spring框架的org.springframework.core.io.Resource类。Spring的Resource接口提供了多种资源类型的抽象,包括类路径资源、文件系统资源、URL资源等。因此,用户可能需要的是在Spring环境下使用Resource读取文件的方法。 接下来,我需要回忆Spring中Resource的使用方式。通常,可以通过ResourceLoader来获取Resource对象,例如ClassPathResource或FileSystemResource。然后,使用Resource的方法如getInputStream()来读取内容。此外,在Spring Boot中,还可以使用@Value注解注入资源路径,或者通过ResourceUtils.getFile()来获取文件。 用户可能需要的示例代码可能包括如何加载资源文件,如何将资源文件读取为字符串或字节流,以及如何处理可能出现的异常,比如文件不存在的情况。同时,需要注意资源路径的正确写法,比如类路径资源使用"classpath:"前缀。 另外,需要检查提供的引用内容是否相关。引用[1]提到了java.io.File和java.nio.file.Path的用法,这与Resource不同,但可能用户之前混淆了这些概念。引用[2]和[3]似乎不相关,引用[4]关于并行计算,也不相关。因此,回答中可能需要指出不同方法的区别,比如使用Resource与传统的File/Path的区别。 用户可能需要明确的步骤:加载Resource对象,读取内容,处理异常。示例代码应该展示不同的资源加载方式,比如类路径、文件系统或URL,并演示如何读取内容。同时,需要提醒资源路径的正确配置,比如在Spring中可能需要使用classpath*:前缀来搜索多个类路径位置。 最后,生成的相关问题需要围绕Resource的使用,比如异常处理、路径格式、与其他方法的比较等。确保回答结构清晰,代码示例正确,并引用相关引用内容中的信息,比如对比File和Path的使用,如引用[1]所示。</think>在Java中,使用`Resource`对象读取文件通常涉及Spring框架的资源抽象机制。以下是不同场景下的具体实现方式: ### 一、基础用法 #### 1.1 通过`ClassPathResource`加载类路径资源 ```java import org.springframework.core.io.ClassPathResource; import org.springframework.util.FileCopyUtils; public String readClasspathFile() throws IOException { Resource resource = new ClassPathResource("data/config.json"); // 类路径根目录开始 try (InputStream inputStream = resource.getInputStream()) { byte[] bytes = FileCopyUtils.copyToByteArray(inputStream); return new String(bytes, StandardCharsets.UTF_8); } } ``` #### 1.2 通过`FileSystemResource`读取绝对路径文件 ```java Resource resource = new FileSystemResource("/opt/app/external_data.csv"); ``` ### 二、进阶用法 #### 2.1 使用`ResourceLoader`动态加载资源 ```java @Autowired private ResourceLoader resourceLoader; public void loadResource(String location) { Resource resource = resourceLoader.getResource(location); // 支持多种前缀: classpath:/ file: http: } ``` #### 2.2 Spring Boot中的`@Value`注入 ```java @Value("classpath:templates/email.html") private Resource emailTemplate; ``` ### 三、路径处理注意事项 - 类路径资源建议使用`classpath*:`前缀进行模糊匹配 - Windows/Linux路径分隔符差异需统一使用`/` - 资源不存在时抛出`FileNotFoundException`[^1] ### 四、与传统IO操作对比 相较于直接使用`java.io.File`或`java.nio.file.Path`,`Resource`接口提供统一的资源访问抽象,支持跨协议访问(如从JAR包内读取)[^1] 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值