Чтобы немного расширить на ответ Кипа , вот простой метод Java 7+ для добавления новой строки в файл, создавая его, если он еще не существует:
try {final Path path = Paths.get ("путь / to / filename.txt"); Files.write (путь, Arrays.asList («Новая строка для добавления»), StandardCharsets.UTF_8, Files.exists (путь)? StandardOpenOption.APPEND: StandardOpenOption.CREATE); } catch (final IOException ioe) {// Добавляем вашу собственную обработку исключений ...}
Примечание: В приведенном выше примере используется файл Files.write [ ! d1], который записывает строки текста в файл (т. е. аналогично команде println
). Чтобы просто написать текст до конца (т. Е. Аналогично команде print
), можно использовать перегрузку Files.write , проходящую в байтовом массиве (например, "MYTEXT" .getBytes (StandardCharsets.UTF_8)
).
Почему это невозможно:
Поскольку String и Integer не находятся в одной иерархии объектов.
Object
/ \
/ \
String Integer
Кастинг, который вы пытаетесь, работает только в том случае, если он в той же иерархии, например
Object
/
/
A
/
/
B
В этом случае (A) objB
или (Object) objB
или (Object) objA
будут работать.
Следовательно, как уже упоминалось ранее, конвертировать целое число для использования строки:
String.valueOf(integer)
или Integer.toString(integer)
для примитива,
или
Integer.toString()
для объекта.
Нет. Каждый объект может быть добавлен к java.lang.Object
, а не к String
. Если вам требуется строковое представление любого объекта, вы должны вызвать метод toString()
; это not так же, как приведение объекта в строку.
В вашем случае не требуется кастинг, вам нужно вызвать toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Кастинг. Как это работает?
Учитывая:
class A {}
class B extends A {}
(A) & nbsp; | | (B)
blockquote>B b = new B(); //no cast A a = b; //upcast with no explicit cast a = (A)b; //upcast with an explicit cast b = (B)a; //downcast
A и B в том же дереве наследования, и мы можем это сделать:
a = new A(); b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
Компилятор должен разрешить вещи, которые могут работать во время выполнения. Однако, если компилятор знает со 100%, что бросок не может работать, компиляция завершится неудачно. Учитывая:
class A {} class B1 extends A {} class B2 extends A {}
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; \ (B1) & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; B1 и B2. Компилятор знает со 100%, что бросок не может работать. Но вы можете обмануть компилятор:
B2 b2 = (B2)(A)b1;
, но в любом случае во время выполнения:
Исключение в потоке «main» java.lang.ClassCastException: B1 нельзя отнести к B2
в вашем случае:
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; \ (целое число) & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; (String )
blockquote>Integer i = 33; //String s = (String)i; - compiler error String s = (String)(Object)i;
во время выполнения: исключение в потоке "main" java.lang.ClassCastException: java.lang.Integer нельзя передать в java.lang.String
Для типов int
используйте:
int myInteger = 1;
String myString = Integer.toString(myInteger);
Для типов Integer
используйте:
Integer myIntegerObject = new Integer(1);
String myString = myIntegerObject.toString();
toString()
– DRiFTy
23 January 2012 в 17:05
String myString = myIntegerObject.toString();
– Ted Hopp
23 January 2012 в 18:19
Вы не можете явно передать что-либо в файл String
, который не является String
. Вы должны использовать либо:
"" + myInt;
, либо:
Integer.toString(myInt);
или:
String.valueOf(myInt);
Я предпочитаю вторую форму, но я думаю, что это личное
Изменить ОК, вот почему я предпочитаю вторую форму. Первая форма, скомпилированная, может создавать экземпляр StringBuffer
(в Java 1.4) или StringBuilder
в 1.5; еще одна вещь - собирать мусор. Насколько я могу судить, компилятор не оптимизирует это. Вторая форма также имеет аналог Integer.toString(myInt, radix)
, который позволяет указать, хотите ли вы шестнадцатеричный, восьмеричный и т. Д. Если вы хотите быть последовательным в своем коде (чисто эстетически, я думаю), вторая форма может использоваться в большем количестве мест.
Редактировать 2 Я предположил, что вы имели в виду, что ваше целое число было int
, а не Integer
. Если это уже Integer
, просто используйте toString()
на нем и сделайте это.
myIntegerObject.toString()
.
– Ted Hopp
23 January 2012 в 18:21
Объекты могут быть преобразованы в строку с использованием метода toString()
:
String myString = myIntegerObject.toString();
Нет такого правила относительно casting . Для того, чтобы кастинг работал, объект должен быть того типа, который вы используете.
Нет, Integer
и String
- разные типы. Чтобы преобразовать целое число в использование строки: String.valueOf(integer)
или Integer.toString(integer)
для примитива или Integer.toString()
для объекта.
Вы должны вызывать myIntegerObject.toString (), если вам требуется представление строки.
Кастинг отличается от преобразования в Java, чтобы использовать неформальную терминологию.
Кастинг объекта означает, что объект уже является тем, на который вы его набрасываете, и вы просто рассказываете компилятору об этом. Например, если у меня есть ссылка Foo
, которую я знаю, это экземпляр FooSubclass
, тогда (FooSubclass)Foo
сообщает компилятору: «Не изменяйте экземпляр, просто знайте, что это на самом деле FooSubclass
.
С другой стороны, Integer
является not a String
, хотя (как вы указываете) существуют методы получения String
, который представляет Integer
. Поскольку ни один экземпляр Integer
не может быть String
, вы не можете использовать Integer
в String
.
Используйте .toString, как показано ниже:
String myString = myIntegerObject.toString();
Использовать String.valueOf (integer) .
Возвращает строковое представление целого числа.
(B) objA
не будет работать.(A) objA
и(B) objB
будут работать. – Bhushan 18 December 2016 в 09:16