day29-2在d盘创建文件夹aaa 里面有aaa.txt bbb.txt ddd.txt

本文介绍了一个简单的Java程序,该程序创建了一个包含多个Person对象的ArrayList,并为每个对象创建了一个文件。Person类具有姓名和年龄属性。程序还展示了如何使用File类进行文件路径操作及文件创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package zuoye;

public class person {
private String name;
private int age;

public person( int age,String name) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

package zuoye;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

public class zuoye1 {
public static void main (String[] args){
try {
fu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void fu() throws IOException{
ArrayList<person> a=new ArrayList<person>();
a.add(new person(1,"aaa"));
a.add(new person(2,"bbb"));
a.add(new person(3,"ddd"));
File d=new File("D://aaa1");
boolean d1 = d.mkdirs();
System.out.println(d1);
Iterator<person> b = a.iterator();
for(person i:a){
String c = i.getName();
File a1=new File("D:\\aaa1\\",c+".tet");
boolean c1 = a1.createNewFile();
System.out.println(c1);
}
File[] c2=d.listFiles();
for(File i:c2){
System.out.println(i);
}
}
}

转载于:https://www.cnblogs.com/hfew/p/10589395.html

<think>嗯,用户遇到了Java文件读取时第一个字符返回-1的问题。首先,我需要分析可能的原因。根据引用[3],如果文件不存在会直接报错,但用户的情况是文件存在却返回-1,说明可能不是路径问题?不过也有可能路径不正确导致FileInputStream找不到文件。比如,相对路径是否正确?用户提供的代码示例中的路径是"day10_IO\\a.txt",可能在不同操作系统下斜杠方向不同,或者文件实际位置不符。 其次,文件是否为空?如果文件内容为空,read()方法会直接返回-1,这可能导致用户误以为第一个字符是-1。这时候需要检查文件是否有实际内容,比如a.txt里是否有字符'c'。 另外,编码问题也可能导致读取异常。比如,如果文件使用了特殊编码格式,而Java默认使用平台编码,可能导致读取错误。例如,UTF-8 BOM头可能会被误读,但通常不会导致返回-1,而是出现乱码。不过引用[3]提到JDK8只能使用平台默认编码,这可能在某些情况下引发问题,但具体是否导致返回-1还需验证。 还有,流是否正确关闭?如果在之前的读取操作中没有正确关闭流,可能导致文件被锁定或状态异常,但用户代码中已经调用了fis.close(),不过最好放在finally块或用try-with-resources确保关闭。 另外,检查是否有权限问题,用户是否有权限读取该文件?不过这种情况通常会抛出异常,而不是静默返回-1。 再看用户提供的代码示例,是否正确处理了字节到字符的转换?比如,FileInputStream读取的是字节,直接转为char可能导致错误,特别是对于非ASCII字符。但用户的问题中第一个字符应为'c',即ASCII码99,所以转换应该正确。不过如果文件是空的,或者读取错误,就会返回-1。 总结可能原因:1. 文件路径错误;2. 文件为空;3. 权限问题;4. 流未正确关闭或之前未释放;5. 编码问题。 解决方案建议:检查文件路径是否正确,确保文件存在且有内容;使用绝对路径测试;检查文件权限;使用try-with-resources自动关闭流;考虑字符编码是否正确,可能需要指定编码方式,比如使用InputStreamReader包装并指定编码。 另外,用户提供的引用[1]中的代码示例使用了FileInputStream,而引用[2]使用了BufferedReader,可能用户混淆了字节流和字符流?比如,直接使用字节流读取文本文件可能在某些情况下出现问题,但如果是纯ASCII字符应该没问题。不过,如果文件包含非ASCII字符,建议使用字符流如FileReader或BufferedReader,并明确指定编码。</think>### 问题分析:Java文件读取第一个字符返回-1的原因及解决方案 #### 可能原因 1. **文件路径错误** - 使用相对路径时,路径基准可能不符合预期(如IDE的工作目录与实际文件位置不一致)[^3] - 示例代码中路径分隔符`day10_IO\\a.txt`在Linux/Mac系统下需改为`day10_IO/a.txt` 2. **文件为空或未正确写入内容** - 若文件大小为0字节,`fis.read()`会直接返回-1 3. **编码格式不匹配** - 文件编码与读取方式不兼容(如UTF-8 BOM头可能被误读为特殊字符,但不会导致返回-1) 4. **流未正确关闭** - 之前操作未释放资源导致文件被锁定(需使用`try-with-resources`确保关闭流) --- #### 解决方案 1. **验证文件路径** 改用绝对路径测试,确保文件存在且可访问: ```java FileInputStream fis = new FileInputStream("C:\\full_path\\aaa.txt"); ``` 2. **检查文件内容** 确认文件包含有效字符(如使用文本编辑器打开文件查看内容)。 3. **使用`try-with-resources`自动关闭流** 避免资源泄漏: ```java try (FileInputStream fis = new FileInputStream("aaa.txt")) { int b; while ((b = fis.read()) != -1) { System.out.println((char) b); } } catch (IOException e) { e.printStackTrace(); } ``` 4. **改用字符流读取文本文件** 对文本文件推荐使用`BufferedReader`+`InputStreamReader`指定编码[^2]: ```java try (BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream("aaa.txt"), StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } ``` --- #### 典型错误场景模拟 若文件内容为`c`但返回-1,可能的调试步骤: 1. 打印文件路径验证: ```java File file = new File("aaa.txt"); System.out.println(file.getAbsolutePath()); // 输出实际路径 System.out.println(file.exists()); // 应输出true ``` 2. 检查文件权限: ```java System.out.println(file.canRead()); // 应输出true ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值