Android - fileInputStream из внешнего хранилища [дубликат]

Создайте новую переменную Count со значением 1 для каждой строки:

df1["Count"] <-1

Затем скомпилируйте фрейм данных, суммируя по столбцу Count:

df2 <- aggregate(df1[c("Count")], by=list(year=df1$year, month=df1$month), FUN=sum, na.rm=TRUE)
28
задан jbearden 1 February 2012 в 14:13
поделиться

3 ответа

Для чтения файла попробуйте следующее:

FileInputStream fis;
fis = openFileInput("test.txt");
StringBuffer fileContent = new StringBuffer("");

byte[] buffer = new byte[1024];

while ((n = fis.read(buffer)) != -1) 
{ 
  fileContent.append(new String(buffer, 0, n)); 
}
60
ответ дан user370305 21 August 2018 в 08:01
поделиться
  • 1
    Пожалуйста, помогите мне немного, вторая строка показывает ошибку openFileInput undefined ... что делать? – someone_ smiley 19 September 2012 в 05:53
  • 2
    @someone_smiley - Где вы пишете эту строку кода? Это метод деятельности. Поэтому либо поместите свой код в «Активность», либо используйте «Контекст активности» с помощью этого метода. – user370305 19 September 2012 в 06:11
  • 3
    hi @ user370305 - мой код не работает. это просто класс, который я намеревался спроектировать, чтобы облегчить некоторые задачи. я отправлю путь к файлу как параметр из класса (опять же не активность), и пусть метод сделает все остальное. пожалуйста, совет, как я могу достичь этого. Спасибо за ваше время – someone_ smiley 19 September 2012 в 09:42
  • 4
    Это верно? Не нужно ли учитывать количество прочитанных байтов перед созданием строки? Что-то вроде этого: while ((n = fis.read (buffer))! = -1) {fileContent.append (new String (buffer, 0, n)); } – Pin 13 March 2013 в 17:49
  • 5
    (Копирование моего комментария из ответа, который скопировал этот код ...) В этом коде есть еще одна ошибка. Вы читаете 1024 байта за раз и предполагаете, что их можно преобразовать в строку с использованием кодировки по умолчанию, но по умолчанию для Android используется UTF8, которая является кодировкой переменной длины. Если 1024-й байт файла является началом двухбайтового символа (или 1-го или 2-го байта 3-байтового символа или так далее), он будет заменен символом маркера, который указывает на ошибку кодирования, и следующий будет поврежден. Используйте Reader при чтении текста, а не InputStream, чтобы избежать ошибок, подобных этому. – Jules 1 August 2013 в 16:35

Попробуйте что-нибудь подобное

    public void writeData ( String data ) {
        try {
            FileOutputStream fOut = openFileOutput ( "settings.dat" , MODE_WORLD_READABLE ) ;
            OutputStreamWriter osw = new OutputStreamWriter ( fOut ) ;
            osw.write ( data ) ;
            osw.flush ( ) ;
            osw.close ( ) ;
        } catch ( Exception e ) {
            e.printStackTrace ( ) ;
        }
    }

    public String readSavedData ( ) {
        StringBuffer datax = new StringBuffer("");
        try {
            FileInputStream fIn = openFileInput ( "settings.dat" ) ;
            InputStreamReader isr = new InputStreamReader ( fIn ) ;
            BufferedReader buffreader = new BufferedReader ( isr ) ;

            String readString = buffreader.readLine ( ) ;
            while ( readString != null ) {
                datax.append(readString);
                readString = buffreader.readLine ( ) ;
            }

            isr.close ( ) ;
        } catch ( IOException ioe ) {
            ioe.printStackTrace ( ) ;
        }
        return datax.toString() ;
    }
35
ответ дан Arslan 21 August 2018 в 08:01
поделиться
  • 1
    Я думаю, что это лучшее решение, а затем другой ответ. Если там есть очень большой файл, и вы не можете прочитать весь файл в памяти, тогда вы можете изменить время, чтобы обрабатывать его по одной строке за другой. Другое решение не так легко изменить, как этот. – rml 21 June 2013 в 23:00
  • 2
    Заменить datax = datax + readString ; на StringBuilder – marcinj 18 January 2014 в 16:30
  • 3
    Может быть, отсутствует datax.append (System.lineSeparator ());? И StringBuilder более эффективен тогда StringBuffer - кроме этого: Спасибо, большая помощь. – Martin 11 January 2015 в 19:49

Меньше - больше,

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tvText = (TextView) findViewById(R.id.tvText);

        try {
            // Create File and Content
            String FILE_NAME = "hallo.txt";
            String content = "Hallo Welt!";

            FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
            fos.write(content.getBytes());
            fos.close();

            // Read File and Content
            FileInputStream fin = openFileInput(FILE_NAME);
            int size;
            String neuText = null;

            // read inside if it is not null (-1 means empty)
            while ((size = fin.read()) != -1) {
                // add & append content
                neuText += Character.toString((char) size);
            }
            // Set text to TextView
            tvText.setText(neuText);

        } catch (Exception error) {
            // Exception
        }
    }
}
1
ответ дан Umut D. 21 August 2018 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: