如何向后读取整数文件



我的老师给我们布置了反转整数文件的家庭作业。 假设我有一个包含 1,2,3,4,5 的文件。 我的作业是将其反转并写入文件,使其包含5,4,3,2,1。 我已经用List做到了。它奏效了。 但是我的老师告诉我不要用List做。 有人可以帮我吗?

static void getNumFiles(File file){
InputStream inputStream = null;
OutputStream outputStream = null;
List<Integer> list = new ArrayList<>();
int actuallyRead = 0;
byte[] buffer = new byte[4];
int[] arr = new int[list.size()];
int counter = list.size();
int x = 0;
try {
inputStream = new FileInputStream(file);
outputStream = new FileOutputStream(file);

while((actuallyRead = inputStream.read(buffer)) != -1){
x = ByteBuffer.wrap(buffer).getInt();
list.add(x);
}
for (int i = 0; i < arr.length; i++) {
arr[i] = list.get(list.size() - i) ;
}
exampleWriteIntegerArray(arr, file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

此答案假定有问题的文件是一个简单的文本文件。原始问题中的文件类型不清楚。

只是一个快速的代码片段,无需使用列表即可完成分配。 它读取输入文件并使用 StringBuilder 来反转输入。然后可以将反向输入写入所需的输出位置。

public static void main(final String[] args) {
try {
String fileContent = new String(Files.readAllBytes(Paths.get("D:/12345.txt"))); // Read file
StringBuilder sb = new StringBuilder(fileContent);
String reversedContent = sb.reverse().toString();
PrintWriter writer = new PrintWriter(new File("D:/54321.txt")); // Create new file and output the reversed String.
writer.println(reversedContent);
writer.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
}

输入: 1,2,3,4,5 输出: 5,4,3,2,1

从你的问题中并不完全清楚你的老师对你的期望是什么。此外,该文件看起来像是具有整数的二进制文件,而不是具有整数值的文本文件。 如果这是真的,无需为您编写程序:

以 RandomAccessFile 的形式打开您的文件。

使用其length()函数确定其中包含多少个整数(请注意,长度以字节为单位,而整数为 32 位(。

使用seek()方法移动到文件中的最后一个 int 位置,使用readInt()读取它,输出它。

在此之前移动一个位置,执行相同的操作,直到您处于位置 0 - 此时您已经读取了整个文件。

如果使用 String 的反向函数,则无法处理以下情况250,150,623更改326,051,052

而且我也无法清楚地理解您的文件上下文。它是否包含分隔符字符的,字符?如果不是,您的文件的分隔符是什么?

在回答的开头,我说你不能处理这个问题。但是,如果您知道文件分隔符是什么,那么您可以将@ProfessionalCode的代码与该附加功能一起使用,

public static void main(final String[] args) {
try {
String fileContent = new String(Files.readAllBytes(Paths.get("D:/12345.txt"))); // Read file
StringBuilder sb = new StringBuilder(fileContent);
String reversedContent = sb.reverse().toString();
char delimiter = " "; //let say it is whitespace 
String temp = ""; //it will use between two delimiters to get reverse String
PrintWriter writer = new PrintWriter(new File("D:/54321.txt")); // Create new file and output the reversed String
for (int i = 0; i < reversedContent.length(); i++){
if(reverseContent.charAt(i) == delimiter){
writer.print(temp.reverse().toString());
writer.print(delimiter.reverse().toString()); //writing your delimiter between all numbers, if it is like ",-" it needed to be reversed to "-,"
temp = "";
}else{
temp += reverseContent.charAt(i);
}
}
writer.print(temp.reverse().toString()); //for last number
writer.close();
}catch (IOException ex) {
ex.printStackTrace();
}
}

最新更新