我的老师给我们做了作业,以反转整数文件。 可以说我有一个包含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();
}
}
}
}
答案 0 :(得分:1)
此答案假定所讨论的文件是简单文本文件。原始问题中的文件类型不清楚。
只是一小段代码,无需使用列表即可完成您的分配。 它读取输入文件,并使用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
答案 1 :(得分:0)
从您的问题中并不能完全清楚您的老师对您的期望是什么。同样,该文件看起来像是具有整数的二进制文件,而不是具有整数值的文本文件。 如果是这样,则无需为您编写程序:
以RandomAccessFile格式打开文件。
使用其length()
函数来确定其中包含多少个整数(请注意,长度以字节为单位,而整数是32位)。
使用seek()
方法移至文件中的最后一个int位置,使用readInt()
进行读取,然后输出。
在此之前移一个位置,执行相同的操作,直到到达位置0-此时您已读取了整个文件。
答案 2 :(得分: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();
}
}