Como acceder a un W2000 desde W10 y no morir en el intento

Intentaremos dilucidad los problemas más comunes a la hora de copiar ficheros a desde un equipo con Windows 2000


Puede parecer descabellado en los tiempos  que corren que aún quede alguna máquina corriendo con Windows 200, pero  por extraño que puede parecer,  en  efecto para determinados servicios legados es posible que necesitemos conectarnos a esa máquina   mediante alguna utilidad  de escritorio remoto ( por ejemplo   mediante el famoso servicio VNC , o el viejo escritorio remoto  mstsc de Windows ,las cual sonra la manera estándar  de trabajar en ambiente Windows)   quizás para actualizar algún desarrollo de nuevo servicio  .

Bien  , quizás  lo “fácil”   sea  acceder mediante el  VNC , o el  mstsc de Windows dado   que son servicios prácticamente integrados en el so,  pero quizas  en realidad lo complejo se haga cuando la máquina está aislada de internet y tratemos de copiar ficheros desde o hacia  esa máquina  a  una local que ejecute un so actual como puede ser w10 +

Si lo intenta  , lo  primero    ya sabemos deberia ser  comprobar la  conectividad  a  esa máquina desde nuestro w10 ,para lo  cual lo  primero es lanzar el comando Ipconfig en el W2000   para saber la dirección IP del servidor

Como vemos en el ejemplo, puede haber diferentes IP’s asociadas al mismo equipo  , pero al menos la ip  de servicio o producción debería devolvernos el ping desde nuestro equipo a la Ip obtenida con el comando ipconfig

 

Una vez sepamos que hay conectividad tcp/ip desde nuestro w10 al w2000   tendremos que comprobar que tiene los servicios de transferencia de ficheros iniciados

 

Si ambas circunstancias se dan  y no puede copiar ficheros desde el terminal server  o desde una unidad de red , probablemente le falle por diversas causas  que vamos a  ver para intentar dilucidar;  

 

SMB1

Si intenta conectar dispositivos que solo admiten SMBv1 o si estos dispositivos intentan conectarse con usted, es posible que reciba alguno de los siguientes mensajes de error:

No se puede conectar con los recursos compartidos de archivos porque no es seguro. Este recurso compartido requiere el protocolo SMB1 obsoleto, el cual no es seguro y podría exponer su sistema a ataques.
Su sistema requiere SMB2 o superior. Para obtener más información sobre cómo solucionar este problema, visite: https://go.microsoft.com/fwlink/?linkid=852747.

Desde luego este error anterior es el más típico, pero  existen otros errores parecidos  que tiene mucha relación con el error anterior:

  • El nombre de red especificado ya no está disponible.
  • Error no especificado 0x80004005
  • Error de sistema 64
  • El servidor especificado no puede realizar la operación solicitada.
  • Error 58

Precisamente  SMBv1 no está instalado de forma predeterminada en Windows 10 versión 1709 ni en Windows Server versión 1709 y posteriores. Tampoco  en Windows 10 Fall Creators Update y Windows Server versión 1709 (RS3) y posteriores, el protocolo de red Bloque de mensajes del servidor versión 1 (SMBv1) no está instalado de forma predeterminada, poruqe desde 2017, se utiliza SMBv2 y protocolos posteriores. Microsoft desaprobó públicamente el protocolo SMBv1 en 2014.

SMBv1 tiene el siguiente comportamiento en Windows 10 Fall Creators Update y en Windows Server versión 1709 (RS3):

  • SMBv1 ahora tiene subcaracterísticas, tanto para el cliente como para el servidor, que pueden desinstalarse por separado.
  • Windows 10 Enterprise y Windows 10 Education ya no contienen SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia.
  • Windows Server 2016 ya no contiene SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia.
  • Windows 10 Home y Windows 10 Pofessional ya no contienen SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia.
  • Windows 10 Home y Windows 10 Professional ya no contienen SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia. Si SMBv1 para cliente no se utiliza durante 15 días en total (excepto cuando el equipo está apagado), se desinstala automáticamente.
  • Las actualizaciones directas y los pilotos de Insider de Windows 10 Home y Windows 10 Professional no quitan SMBv1 automáticamente desde el inicio. Si SMBv1 para el cliente o el servidor no se utiliza durante un total de 15 días (sin incluir el tiempo durante el que el equipo está apagado), cada uno se desinstala automáticamente. 
  • Las actualizaciones directas y los pilotos de Insider de Windows 10 Enterprise y Windows 10 Education no quitan SMBv1 automáticamente. Un administrador debe decidir desinstalar SMBv1 en estos entornos administrados. En Windows 10 versión 1809 (RS5) y versiones posteriores, un administrador puede activar la eliminación automática de SMBv1 activando la característica “Eliminación automática de SMB 1.0/CIFS”.
  • Quitar automáticamente SMBv1 después de 15 días es una operación de un solo uso. Si un administrador reinstala SMBv1, no se harán más intentos para desinstalarlo.
  • Las características de los SMB versión 2.02, 2.1, 3.0, 3.02 y 3.1.1 aún son totalmente compatibles y se incluyen de forma predeterminada como parte de los archivos binarios de SMBv2.
  • Debido a que el servicio Explorador de equipos utiliza SMBv1, el servicio se desinstalará si SMBv1 para el cliente o el servidor también se desinstala. Esto significa que Explorer Network ya no puede mostrar a los equipos con Windows por medio del método de exploración de datagramas NetBIOS heredado.
  • SMBv1 aún puede reinstalarse en todas las ediciones de Windows 10 y Windows Server 2016.

Windows 10 versión 1803 (RS4) Profesional controla SMBv1 de la misma forma que la versión 1703 de Windows 10 (RS2) y Windows 10 versión 1607 (RS1). Este error se corrigió en Windows 10 versión 1809 (RS5). Todavía puede desinstalar SMBv1 manualmente. Sin embargo, Windows no desinstalará automáticamente SMBv1 después de 15 días en los siguientes escenarios:

  • Si realiza una instalación limpia de Windows 10 versión 1803.
  • Si actualiza Windows 10 versión 1607 o Windows 10 versión 1703 a Windows 10 versión 1803 directamente, sin actualizar primero a Windows 10 versión 1709.

 

Volver a activar SMBv1 en Windows 10

Con la nueva versión de Window 10 Fall Creators, microsoft a tomado la decisión de deshabilitar el protocolo SMB versión 1 ,después de todos los problemas sufridos por Wannacry,Petya… que aprovechaban una vulnerabilidad del protocolo.  Si no tenemos más remedio que habilitar SMB v1 en Windows 10  ,tendremos que abrir una consola de powershell como administrador y ejecutamos el  comando de activación de este protocolo, es decir seguiremos los siguientes pasos :

  1. Para activar el Power Shell debemos ejecutarlo como permisos de administrador
  2. Nos debe  salir una ventana de texto con el prompt   con el  PS
  3. Ejecutar la siguiente orden:  Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
  4. Reiniciamos el sistema para aplicar los cambios
  5. En   teoría   ya deberíamos poder  acceder a los recursos compartidos.

Podemos volver a deshabilitar SMB v1 en cualquier momento con : Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol

 

 

Windows 10 “el servicio de inicio de sesión de la red no se ha iniciado” y error 1068

Si a pesar de haber realizado el paso anterior cuando se intente conectar a una unidad de red aparece el error “el servicio de inicio de sesión de la red no se ha iniciado” lo  primero es averiguar los permisos

Si da igual con que usuario entre y  siempre sale ese error, probaremos   usando el usuario administrador.

)

 

Si entrando con el usuario administrador va buscando el problema, intentando cambiar el nombre del equipo (pero aparece en gris y sale un mensaje de que el servicio de “estación de trabajo no funciona” y no deja cambiar el nombre del equipo, nos deberíamos   ir a ver los servicios para intentar activar el servicio “estación de trabajo

Si nos aparece  el error 1068  esto  significa “No se puede iniciar el servicio o grupo de dependencia”.

El servicio Estación de trabajo tiene dos componentes que dependen de él

  • Los servicios Net Logon
  •  Configuración de Escritorio remoto.

Es posible que el servicio Net Logon tenga algún problema. Accede a la consola de servicios, desde la cuenta administrador y compruebe el servicio

Concurso Azure Sphere

Vea todas las oportunidades para aprender, construir y competir por grandes premios con su nuevo kit de Azure Sphere


En la era de IoT, nuestra vida está cada vez más integrada con la tecnología  gracias a la capacidad de los dispositivos de consumo cotidiano, las máquinas industriales, los vehículos y los electrodomésticos para interactuar entre sí mediante la conectividad de Internet integrada ha hecho la vida más fácil y eficiente.

Microsoft ha desarrollado Azure Sphere para el desarrollo de dispositivos de microcontroladores (MCU) altamente seguros compatibles con implementaciones de IoT  , intentando  asegurarse de que los dispositivos innovadores puedan continuar alterando el status quo y mejorando nuestras vidas sin sacrificar el importante aspecto de  nuestra seguridad, aspecto  de los mas  crucial para  que el IoT pueda  seguir evolucionando. 

En este senctido  Microsoft  ha hecho una llamada a todos los ingenieros y desarrolladores de todo el mundo para crear proyectos altamente seguros, impulsados ​​por MCU utilizando Azure Sphere, diseñando formas creativas para asegurar lo que más lo necesita: ¡todo! 

Asegurar sus datos es importante en una gran cantidad de industrias. Aquí hay algunas ideas para comenzar:

  • Integrar Azure Sphere en dispositivos perimetrales de IoT nuevos o existentes
  • Asegurar sus proyectos de electrónica de consumo .
  • Innovaciones en torno al comercio seguro e inteligente
  • Construccion de soluciones robustas y seguras para edificios y domótica.
  • Diseñar soluciones seguras de fábrica.
  • Crear soluciones de energías renovables

La idea  pues es crear un nuevo proyecto en torno al concepto de seguridad o simplemente mejore la seguridad de sus proyectos existentes con su nuevo kit de Azure Sphere  contandoles detalles urante la experiencia. ¿La mejor parte? ¡Avnet está regalando hasta 20,000 Kits de Esfera Azure gratis para que podamos comenzar!

shutterstock_674647300.jpg

 

¿Qué es Microsoft Azure Sphere?

Azure Sphere consta de tres capas de seguridad: en el sistema operativo, en la nube y en la MCU.

  • Seguridad en el sistema operativo:Un SO creado a propósito reepecto a aspectos como  la seguridad y agilidad para crear una plataforma confiable para nuevas experiencias de IoT. Un sistema operativo seguro construye innovaciones de seguridad pioneras en Windows en un HLOS lo suficientemente pequeño para los MCU.

  • Seguridad en la MCU:Asegurado desde y hasta  el silicio  Esta nueva clase cruzada de MCU ahora combina procesadores de aplicaciones y en tiempo real con tecnología de seguridad y conectividad de Microsoft incorporadas.

  • Seguridad en la nube: Protege los dispositivos con una nube construida para la seguridad de IoT. El servicio de seguridad de Azure Sphere renueva la seguridad del dispositivo, identifica las amenazas emergentes y la confianza de los intermediarios entre el dispositivo, la nube y otros puntos finales.

 El hardware

Especificaciones del Carrier Board

  • Dos zócalos de expansión MikroE Click board
  • Conector de expansión Grove (I2C)
  • Sensores a bordo: acelerómetro de 3 ejes, giroscopio de 3 ejes, temperatura, presión / barométrica, luz ambiental
  • Interfaz para pantalla OLED 128×64 opcional
  • Interfaz USB
  • Soporta depuración, servicio y recuperación
  • UARTs, y JTAG
  • Interruptores pulsadores de usuario y LEDs.
  • Regulación de potencia de 5V a 3.3V
  • Entrada de alimentación de CC: USB 5V desde la computadora central y huellas de terminales para suministros externos de 5V DC y VBAT

Módulo Azure Sphere MT3620

  • MediaTek MT3620AN SoC
  • 3 interfaces ISU configuradas para UART, SPI, I2C
  • ADC / GPIO: 3x entradas de ADC de 12 bits (o 3 GPIOs)
  • PWM / GPIO: 9x salidas PWM (o hasta 24 GPIOs)
  • RTC (requiere suministro VBAT)
  • Wi-Fi de banda dual 2.4 / 5GHz 802.11 a / b / g / n
  • Antena chip de doble banda 2.4 / 5GHz

 El software

Tenga en cuenta los escenarios del mundo real: su solución segura deberá tener una transmisión de comunicación diaria con la Nube de Azure para garantizar una conexión protegida continua. Use su kit de desarrollo de Azure Sphere para aprovechar los servicios en la nube de Microsoft..

 

 

Concurso

 

Puede  regístrese para obtener su kit gratuito , eso si deberemos pagar los costes de envío y los impuestos o aranceles aduaneros de su país. !Incluso aún puede participar si su país no es elegible para los kits gratuitos pues si su país no está en la lista, consulte con frecuencia a medida que amplian el  alcance!.(vea todos los países elegibles. )

main-view.jpg

La seguridad es sumamente importante, pero la consistencia en entornos seguros es lo que nos mantiene en línea  por ello buscan que se pueda mostrar el kit de Azure Sphere como puede permanecer en línea durante 30 días consecutivos y de esta modo  será elegible para ganar los  mejores premios.

Una vez que tenga su kit en la mano, conéctelo y regístrelo descargando la pequeña aplicación de Windows para la sincronización diaria con el servidor de concursos.( Por favor revise las instrucciones de registro ) .Más detalles se pueden encontrar en las reglas oficiales.

 SoftWeb Solutions han construido un increíble “mapa de calor” para ver dónde se han conectado nuestros 20,000 kits de Azure Sphere en todo el mundo. Estaremos representado cada vez que realizemos la sincronización diaria y se convierta en parte de la presencia global de Azure Sphere. Échele un vistazo en el Mapa de Calor de Azure Sphere .

Captura de pantalla 2019-07-23 a las 9.40.08 AM.png

 

Este concurso es parte de una campaña más grande de comunidades de Avnet. Vea el desafío Sensing the World de element14, seminarios web, talleres virtuales y más recursos en secureeverything.avnet.com .

e14-01_vv8GvW475C.png

Premios

¡Estan regalando miles de dólares en premios a los 510 mejores proyectos! Un premio por persona: ninguna persona puede ganar el premio total de $ 35,000. Los  jueces elegirán los mejores proyectos calificados según los criterios de evaluación descritos en la sección de reglas. Los premios de Nivel 3 se entregan únicamente en función de los requisitos de elegibilidad.

Tier 1

Para los proyectos que se separan claramente del resto y demostraron creatividad y uso ejemplar de Azure Sphere. Para ser considerado para los premios de Nivel 1, debe hacer ping a la Nube de Azure una vez al día durante 30 días consecutivos.

3 ganadores de Microsoft Hololens  valorasas en $ 3,500

El mejor proyecto de su clase y el diseño de referencia definitivo para Microsoft Azure Sphere.

El nivel 2

Para los proyectos que se separan claramente del resto y demostraron creatividad y uso ejemplar de Azure Sphere. Para ser considerado para los premios de Nivel 2, debe hacer ping a la Nube de Azure una vez al día durante 15 días consecutivos.

7 ganadores de Surface Laptop  valoradas en  $ 1,000

Nivel 3

Para ser elegible para el premio Tier 3, su proyecto debe usar el kit de desarrollo de Azure Sphere. ¡Los proyectos ganarán automáticamente una nueva Raspberry Pi 4! Eche un vistazo a nuestros requisitos de calificación en la pestaña de reglas.

500 ganadores de Raspberry Pi 4 valoradas en  $ 35

Premio Hackster Impact

Únase a Hackster mientras nos unimos a los Objetivos de Desarrollo Sostenible (ODS) delas Naciones Unidas para hacer del mundo de hoy un lugar más inteligente y saludable. El equipo de Hackster seleccionará el proyecto que mejor contribuya a cualquiera de los ODS.Consulte los criterios de evaluación específicos para esta categoría de premios .

5 ganadoresTarjeta de regalo de $ 250 + tarjeta de regalo Adafruit de $ 100 + entrevista en video + másValor de $ 530

El ganador recibirá lo siguiente: 
– una tarjeta de regalo de $ 250; 
– una tarjeta de regalo Adafruit de $ 100 (premio especial para el concurso Secure Everything); 
– una suscripción de 12 meses a Patchr Premium (valor de $ 180); 
– Por último, pero no menos importante, se presentarán en una entrevista en video con el único y único Alex Glow de Hackster.

Por favor, visite la página del Premio Hackster Impact para más información.

Recursos

 

 

Mas info en hackester.io

 

Como acceder desde Java a contenidos de celdas en Excel

A veces necesitamos capturar la información de hojas excel y de un modo automático , y es donde entra java y una librería que lo hará posible


Lo cierto es puede que  en  ocasiones necesitemos procesar ficheros excel u otro tipo de hojas de cálculo de   forma automatizada, por ejemplo  para extraer  información  de determinadas celdas, manipular estas , generar ficheros de metadatos que  sigan ciertas reglas , etc

En este caso nos vamos a centrar en los documentos OLE 2 de Microsoft, que manipularemos  usando la libreria  Apache POI – the Java API for Microsoft Documents, que nos proporciona acceso a los diferentes tipos de ficheros de Microsoft que utilizan esta estructura como:  Excel Word o  Powerpoint, también hay otros proyectos dentro de esta API para Visio y Publisher por ejemplo

Como se  puede   imaginar de todos estos el más desarrollado es Excel Workbooks y es precisamente el tipo de fichero elegido para este ejemplo.

Antes de empezar  usaremos  la librería POI-HSSF and POI-XSSF – Java API To Access Microsoft, donde HSSF es el proyecto POI de implementación total en Java para ficheros excel.Esta libreria usa cuatro componentes fundamentalmente:

  • HSSFWorkbook: Representación de alto nivel de un libro (Workbook) que será nuestra documento excel. Es el primer objeto que construiremos si vamos a leer o escribir una hoja excel.
  • HSSFSheet: representación de alto nivel de una hoja excel, podemos elegir la hoja de la excel usando el HSSFWorkBook.
  • HSSFRow: representación de celda de una fila de la hoja excel, solo las filas que tienen filas se pueden añadir a la hoja.
  • HSSFCell: representación de una celda en una fila de la un hoja de la excel, la utilizaremos para manejar el contenido de la celda.

Bien, sin más  dilaciones,  empezamos  a  ver como podemos procesar ficheros de Tipo Excel  

Paso 1: Descargar librería Apache Poi Java API

Antes de nada, tenemos que descargar la librería API Apache Poi Java, para añadirla a nuestro proyecto, voy a explicar cómo hacerlo en el IDE que estoy usando para este ejemplo: Netbeans, en otros IDES será similar la forma de integración de las librerías.

En nuestro proyecto buscamos la carpeta Libraries nos colocamos encima y seleccionamos Add Library, no tiene mucho que explicar así que te lo mostraré en imágenes:

La librería es  https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-4.1.0-20190412.zip

 

 

 

 

Paso 2-Registro de la librería en nuestro proyecto

Una vez  descargada y descomprimida, nos iremos a Properties del proyecto , después a   Java Build Path y   pincharemos en la pestaña  Libraries

Aquí  pulsaremos Add External JARs  seleccionando “poi-4.01.jar” desde al ruta donde la hayamos dejado esta librería.

 

 

Paso 3-Incluir las librerías

Ahora toca pasarse  a  programar, pero antes , no debemos olvidar importar las  cuatro librerias  que comentaabamos al principio

  • HSSFRow: representación de celda de una fila de la hoja excel, solo las filas que tienen filas se pueden añadir a la hoja.
  • HSSFWorkbook: Representación de alto nivel de un libro (Workbook) que será nuestra documento excel. Es el primer objeto que construiremos si vamos a leer o escribir una hoja excel.
  • HSSFSheet: representación de alto nivel de una hoja excel, podemos elegir la hoja de la excel usando el HSSFWorkBook.
  • HSSFCell: representación de una celda en una fila de la un hoja de la excel, la utilizaremos para manejar el contenido de la celda

Visto asi , adjuntando otras librerias utiles , la cabecera de importaciones de librerias quedaria  asi: 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;


import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;

import java.io.FileDescriptor;

import org.apache.poi.ss.usermodel.Cell;

 

Paso 4-Convertir al menos a  formato excel97  o superior

Antes de proseguir , en caso de tener ficheros excel en formato muy antiguos( por ejemplo Excel 95) .  deberemos  convertir estos   al menos al  formato excel 97,  para ello, en caso de que el formato sea de excel 95 deberemos abrir dicho fichero e irnos  a la opción   Guardar como seleccionamos   “libro de Excel 97-2003(*.xls)”

 

 

 

5-Pasemos al código

Una vez salvada  la hoja en formato excel 97 o superior  veamos un simple ejemplo de cómo capturar  los valores contenidos en las celdas

 

                      ——

      FileInputStream file = new FileInputStream(new File("C:\\prueba.xls"));

    // Crear el objeto que tendrá el libro de Excel

      XSSFWorkbook workbook = new XSSFWorkbook(file);

      /** Obtenemos la primera pestaña a la que se quiera procesar indicando el indice.

     * Una vez obtenida la hoja excel con las filas que se quieren leer obtenemos el iterator

      * que nos permite recorrer cada una de las filas que contiene.

      */



      XSSFSheet sheet = workbook.getSheetAt(0);

      Iterator<Row> rowIterator = sheet.iterator();

      Row row;

    // Recorremos todas las filas para mostrar el contenido de cada celda

      while (rowIterator.hasNext()){

          row = rowIterator.next();

         // Obtenemos el iterator que permite recorres todas las celdas de una fila

          Iterator<Cell> cellIterator = row.cellIterator();

          Cell celda;

          while (cellIterator.hasNext()){

            celda = cellIterator.next();

            // Dependiendo del formato de la celda el valor se debe mostrar como String, Fecha, boolean, entero...

            switch(celda.getCellType()) {

            case Cell.CELL_TYPE_NUMERIC:

                if( DateUtil.isCellDateFormatted(celda) ){

                   System.out.println(celda.getDateCellValue());

                }else{

                   System.out.println(celda.getNumericCellValue());

                }

                break;

            case Cell.CELL_TYPE_STRING:

                System.out.println(celda.getStringCellValue());

                break;

            case Cell.CELL_TYPE_BOOLEAN:

                System.out.println(celda.getBooleanCellValue());

                break;

            }

          }

      }


   // cerramos el libro excel

      workbook.close();


Como vemos en el ejemplo anterior , crearemos el objeto que tendrá el libro de Excel(FileInputStream file = new FileInputStream(new File(“xxx..) y obtenemos la primera pestaña a la que se quiera procesar indicando el indice 0 (  XSSFSheet sheet = workbook.getSheetAt(0);

Una vez obtenida la hoja excel con las filas que se quieren leer ,obtenemos el iterator que nos permite recorrer cada una de las filas que contiene. (  Iterator<Row> rowIterator = sheet.iterator()😉

Y  ya bastaría ir recorriendo todas las filas con un bucle  while ( while (cellIterator.hasNext()))  ,  lo cual nos  va  a permitir  procesar  el contenido de cada celda

Obtenemos el iterator(  row = rowIterator.next(); ) que permite recorrer todas las celdas de una fila y salvar el objeto en la variable row

Ahora ya dependiendo del formato de la celda de la variable   row  ,  el valor se debe mostrar como String, Fecha, boolean, entero

El programa tras recorrer todas las filas acaba cerrando el libro excel

 

 

Como ejemplo más elaborado , vamos a ver como procesar  una hoja excel s donde cada fila representa los diferentes metadatos , por lo que con el programa  iremos capturando dicha información diferente  celda a celda para cada fila , para ir componiendo una fila de texto con los diferentes metadatos  capturados   y  que separaremos por el carácter almohadilla ( #) .

Finalmente veamos  pues el ejemplo cuya finalidad es extraer de un excel un fichero csv de un modo automático via el siguiente programa en java;

 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;


import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;

import java.io.FileDescriptor;

import org.apache.poi.ss.usermodel.Cell;

 

 

public class Main {

//private static String nombre;

public static void main(final String[] args) throws IOException {

String lineaslog=””;
String lineaslog2=”\r\n”;

//fichero de log
File filelog = new File(“d://ficherolog.txt”);
FileOutputStream fos2log = new FileOutputStream(filelog);

 


//añadimos 4 ceros la contador y generamos nuevo nombre
nfichero= “salida.txt”;
System.out.println(“Nuevo nombre fichero salida:” + nfichero);
lineaslog=”Nuevo nombre fichero salida:” + nfichero;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());
//Procesar el excel a txt


//Creamos nuevo fichero de metadatos del tipo texto
File file = new File(nfichero);
FileOutputStream fos1 = new FileOutputStream(file);
FileDescriptor fd = fos1.getFD();


FileOutputStream fos2 = new FileOutputStream(fd);

String rutaArchivo=files22[ i ] ; //directorio3;
System.out.println (“Leyendo archivo :” + rutaArchivo );
lineaslog=”Leyendo archivo :” + rutaArchivo ;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());

System.out.println (“NOMBRE HOJA :”+ hoja);
lineaslog=”NOMBRE HOJA :”+ hoja;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());



try (FileInputStream fileexcel = new FileInputStream(new File(rutaArchivo)))

{
System.out.println(“Leer archivo Excel “);
lineaslog=”Leer archivo Excel “;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());

// leer archivo excel97
HSSFWorkbook worbook = new HSSFWorkbook(fileexcel);

System.out.println(“Leyendo la hoja del fichero excel”);
lineaslog=”Leyendo la hoja del fichero excel”;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());

//obtener la hoja que se va leer
HSSFSheet sheet = worbook.getSheetAt(0);

System.out.println(“Obtener las hojas del fichero excel”);
lineaslog=”Obtener las hojas del fichero excel”;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());
//obtener todas las filas de la hoja excel
Iterator<Row> rowIterator = sheet.iterator();

Row row;

System.out.println(“La ruta del fichero excel es rutaarchivo :”+rutaArchivo);
lineaslog=”La ruta del fichero excel es rutaarchiv:”+rutaArchivo;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());


Integer nm3=0;

while (rowIterator.hasNext()) // se recorre cada fila hasta el final

{

//System.out.println(“linea1”);

row = rowIterator.next();
nm3=nm3+1;

//se obtiene las celdas por fila
Iterator<Cell> cellIterator = row.cellIterator();
Cell cell;

//se recorre cada celda
int indice=0;
while (cellIterator.hasNext()) {

// se obtiene la celda en específico y se la imprime
cell = cellIterator.next();

//System.out.print(“(i”+i +”)=”+ cell.getStringCellValue()+” | “);

switch (indice) //tomaremos diferentes columnas del fichero excel
{

case 0:
{
nombre_fichero=cell.getStringCellValue();
}
case 1:
{
boletin=cell.getStringCellValue();
}
case 2:
{
telefono=cell.getStringCellValue();
}

case 3: // cif o nif
{
ncif=cell.getStringCellValue();
}

case 4: //valor del cif
{
cif=cell.getStringCellValue();
}

case 8:
{
fecha=cell.getStringCellValue();
}
case 9:
{
hora=cell.getStringCellValue();
}
}



linea= linea + cell.getStringCellValue() +”#”;

indice=indice+1;

}


lineas=boletin +”#” +telefono +”#”+ncif+”#” + cif+”#”+tipo +”#” +fecha+” “+hora+”#” +”#” +”#” +”#”+ nombre_fichero+ “#”+ nombre_fichero+”#”;


fos2.write(lineas.getBytes());

//System.out.println();

lineas=”\r\n”;

fos2.write(lineas.getBytes());

}

worbook.close();


linearesumen= directorio+”;”+ hoja +”;”+directorio22+ “P5_”+ fechaok+String.format(“%05d”, contador) +”;”+nm3;

fos3.write(linearesumen.getBytes());

linearesumen=”\r\n”;

fos3.write(linearesumen.getBytes());

nm3=0;

}
catch (Exception e)

{

e.getMessage();
System.out.println(e.getMessage());
lineaslog=e.getMessage();
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());

}

fos1.close();
fos2.close();

System.out.println(“Fin de generacion del txt de metadatos desde excel a txt”);
lineaslog=”Fin de generacion del txt de metadatos desde excel a txt”;
fos2log.write(lineaslog.getBytes());
fos2log.write(lineaslog2.getBytes());

}