лучший способ - использовать Java7: Java 7 вводит новый способ работы с файловой системой, а также новый класс утилиты - Files. Используя класс Files, мы можем создавать, перемещать, копировать, удалять файлы и каталоги; его также можно использовать для чтения и записи в файл.
public void saveDataInFile(String data) throws IOException {
Path path = Paths.get(fileName);
byte[] strToBytes = data.getBytes();
Files.write(path, strToBytes);
}
Запись с помощью FileChannel. Если вы имеете дело с большими файлами, FileChannel может быть быстрее стандартного ввода-вывода. Следующий код записывает String в файл с помощью FileChannel:
public void saveDataInFile(String data)
throws IOException {
RandomAccessFile stream = new RandomAccessFile(fileName, "rw");
FileChannel channel = stream.getChannel();
byte[] strBytes = data.getBytes();
ByteBuffer buffer = ByteBuffer.allocate(strBytes.length);
buffer.put(strBytes);
buffer.flip();
channel.write(buffer);
stream.close();
channel.close();
}
Запись с помощью DataOutputStream
public void saveDataInFile(String data) throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));
outStream.writeUTF(data);
outStream.close();
}
Запись с помощью FileOutputStream
Давайте посмотрим, как мы можем используйте FileOutputStream для записи двоичных данных в файл. Следующий код преобразует строковый int bytes и записывает байты в файл с помощью FileOutputStream:
public void saveDataInFile(String data) throws IOException {
FileOutputStream outputStream = new FileOutputStream(fileName);
byte[] strToBytes = data.getBytes();
outputStream.write(strToBytes);
outputStream.close();
}
Write with PrintWriter мы можем использовать PrintWriter для записи форматированного текста в файл:
public void saveDataInFile() throws IOException {
FileWriter fileWriter = new FileWriter(fileName);
PrintWriter printWriter = new PrintWriter(fileWriter);
printWriter.print("Some String");
printWriter.printf("Product name is %s and its price is %d $", "iPhone", 1000);
printWriter.close();
}
Запись с помощью BufferedWriter: используйте BufferedWriter для записи String в новый файл:
public void saveDataInFile(String data) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(data);
writer.close();
}
добавьте строку в существующий файл:
public void saveDataInFile(String data) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
writer.append(' ');
writer.append(data);
writer.close();
}
Если ключи массива в вашем массиве PHP не являются последовательными числами, json_encode()
должны сделать другой объект конструкцией, так как массивы JavaScript всегда последовательно индексируются по цифре. Используйте array_values()
внешнюю структуру PHP, чтобы отменить исходные ключи массива и заменить их нулевой последовательной нумерацией:
// Non-consecutive number keys are OK for PHP
// but not for a JavaScript array
$array = array(
2 => array("Afghanistan",32,13),
4 => array("Albania",32,12)
);
// array_values() removes the original keys and replaces
// with plain consecutive numbers
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]
json_encode () поможет вам закодировать массив на JSON в php.
, если вы будете использовать только функцию json_encode напрямую без какой-либо конкретной опции, она вернет массив. Как упоминается выше вопрос
$array = array(
2 => array("Afghanistan",32,13),
4 => array("Albania",32,12)
);
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]
Поскольку вы пытаетесь преобразовать Array в JSON, тогда я бы предложил использовать JSON_FORCE_OBJECT в качестве дополнительной опции (параметров) в json_encode, как ниже
<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"}
?>
Я хочу добавить к ответу Майкла Берковски, что это также может произойти, если порядок массива будет отменен, и в этом случае немного сложнее наблюдать эту проблему, потому что в объекте json порядок будет упорядочен по возрастанию.
Например:
[
3 => 'a',
2 => 'b',
1 => 'c',
0 => 'd'
]
Вернет:
{
0: 'd',
1: 'c',
2: 'b',
3: 'a'
}
Таким образом, решение в этом случае должно использовать array_reverse
перед его кодировкой json
Если вы не укажете индексы в своем начальном массиве, вы получите регулярные числовые. Массивы должны иметь какой-то уникальный индекс
json_encode()
создаст объект{}
, а не массив[]
, поскольку JavaScript / JSON не имеет другой способ представления такой структуры. Но да, вы можете удалить ключи с помощьюarray_keys()
, если они не нужны в результирующей строке json. – Michael Berkowski 13 July 2016 в 18:35array_*()
все очень эффективны. В небольшом массиве я обычно предпочитаю использовать несколько одиночных действий array_ *, если я могу избежать циклов. Но если ваш mysqli_result большой, вы можете не захотеть скомпилировать его все в массив сразу, а затем вызватьarray_values()
. Вместо этого вам может быть лучше добавить строки в массив при извлечении. Все предположения, хотя я не знаю, как выглядит ваш код. – Michael Berkowski 19 October 2017 в 20:55