Должно работать что-то вроде следующего:
const str = "aaa-bbb-ccc-dd";
const arr = srt.split("-");
this.setState({str1 : arr[0],str2 : arr[1], str3: arr[2], str4 : arr[3]});
Для файлов Вы не можете видеть IOException, бросаемый часто на завершение (), но Вы будете определенно видеть его для нефайлового ввода-вывода как закрытие сокетов к сети.
Вот пример из ошибки Java, где закрытие сокета UDP в конечном счете заставило IOException быть брошенным.
Я нашел два случая:
Оба из тех примеров зависят от чего-то случай, в то время как существуют все еще данные в буфере. Близкие сбросы буфер перед файлом является завершениями, поэтому если существует ошибка при записи данных в файл, это бросает IOException.
, Если Вы выполняете следующий код, передающий его название файла для создания на сетевом диске, и затем перед нажатием клавиши Enter, отключают сетевой кабель, это заставит программу бросать IOException в завершение.
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(final String[] argv)
{
final File file;
file = new File(argv[0]);
process(file);
}
private static void process(final File file)
{
Writer writer;
writer = null;
try
{
writer = new FileWriter(file);
writer.write('a');
}
catch(final IOException ex)
{
System.err.println("error opening file: " + file.getAbsolutePath());
}
finally
{
if(writer != null)
{
try
{
try
{
System.out.println("Please press enter");
System.in.read();
}
catch(IOException ex)
{
System.err.println("error reading from the keyboard");
}
writer.close();
}
catch(final IOException ex)
{
System.err.println("See it can be thrown!");
}
}
}
}
}
<час> Начиная с Java 7 можно использовать попытку с ресурсами выйти из этой путаницы (удалил явный код поколения исключения для close()
операция):
private static void process(final File file) {
try (final Writer writer = new FileWriter(file)) {
writer.write('a');
} catch (final IOException e) {
// handle exception
}
}
это автоволшебно обработает исключения в close()
, и это выполняет явное null
проверка внутренне.
Когда это действительно происходит, это должно быть обработано как любой другой IOException
, не тихо проигнорировано как Вы, посмотрите рекомендуемый так часто. Предположение, я предполагаю, что, так как Вы сделаны с помощью потока, не имеет значения, если это было очищено правильно.
Однако чистка правильно важна. Если close()
операция действительно повышает исключение, его вероятное, что она включила сбрасывание некоторого вывода, фиксацию некоторой транзакции (в случае соединения с базой данных Вы думали, было только для чтения), и т.д. — определенно не что-то, что должно быть проигнорировано. И, так как это редко, Вы не ставите под угрозу надежность своего приложения значительно путем прерывания операции.
Это конкретно FileInputStream.close
, который не бросает, даже если Ваш жесткий диск горит. По-видимому, это - то же для входа сокета. Для потоков вывода можно также сбрасывать. До относительно недавно [видят, что метки времени] BufferedOutputStream
раньше не удавались закрыть базовый поток, если flush
бросил.
(@MaartenBodewes хотел бы, чтобы я указал, что FileInputStream.close
не бросок не определяется документами API. Во время сообщения это было обычно для игнорирования пункта, упомянув, что это имело отношение к JDK Sun (теперь известный как Oracle JDK и OpenJDK). Кажется, что неясное прежнее переопределение назвало Гармонию Apache, которую раньше использовал Android, возможно, имел другое поведение. Потенциально другие реализации или версии OpenJDK, могут также бросить.)
Исследование того, что может произойти при вызове близко, как сокрытие исключения может влиять на Вас и что можно делать с этим: сообщение в блоге .